Hurricane Sandy cost me a customer. Long lasting power and Internet outages after the storm made them decide that they need to have their email and other critical servers moved to the cloud. They chose Google Apps and will not be using Kerio Connect any longer.
Of course they didn't have to switch off Kerio Connect. They could have moved it to Amazon or to smaller (and easier to deal with) hosting services like the Linode server I run on. It would have cost far less money and they would have retained control of their email. However, their decision was Google Apps and that's that.
Well, not quite "that's that". Changing mail servers requires transferring some data. I'll look at transferring from Kerio to Gmail here, but the concepts are the same no matter what mail server you choose.
Moving the mail
Google Apps supports transferring accounts and mail from any IMAP server. You do need to create a CSV file that maps old system users to new.
Individual users (GMail, not Google Apps)
If you are using Outlook or some other mail client that supports IMAP, transferring mail to a new service can be as simple as setting up both accounts (enable IMAP in Gmail) and dragging and dropping mail folders from one place to another. That could be a fair amount of manual labor and it does require that the client be smart enough to automatically create new folders when needed - older versions of Outlook Express lacked that ability; other clients may still.
It would be nice if the receiving end could just import email. Gmail can, and although they don't mention Kerio specifically in their list of mail servers they can import from, it can can import POP accounts:
POP only looks at the INBOX, though, so that would require that you move all messages to your INBOX. As Google nicely offers to label messages as they are imported, you could do that in stages, bringing in subfolders, importing and labeling, rinse and repeat.
If you couldn't do that, you'd need to use something like PerlMail::IMAPClient to read and then inject messages to the new account. Or, assuming that you have enough clout, you might be able to convince the receiving end to do the work for you. One of the nice things about Kerio Connect is that the messages are just individual text files - there is no proprietary database to decode. Any decent programmer could take those messages and insert them into another mailserver without needing any special knowledge of Kerio Connect at all.
By the way, that's not necessarily going to be true going the other direction. Google does make it easy to move data out of its systems, but not everyone is as friendly.
Even if moving a few hundred gigabytes of email is too much to contemplate, most people would want to move contacts. Just like the email itself, Kerio Connect stores contacts as individual text files. These are just vCard format with a little extraneous data at the top:
Subject: Tony Lawrence Date: Fri, 17 Jun 2011 09:13:48 -0400 Content-Type: text/vcard; charset="utf-8" Content-Transfer-Encoding: 8bit BEGIN:VCARD VERSION:3.0 PRODID:-//kerio.com/Contacts//NONSGML v1.0//EN N:Lawrence;Tony;;; FN:Tony Lawrence X-FILE-AS:Lawrence, Tony CLASS:PUBLIC EMAIL;TYPE=PREF,HOME;CN="Tony Lawrence":[email protected] UID:c4e1f2c0-1774-4ea9-b8c4-ce04ccea491f END:VCARD
Many mail programs understand how to import vCard, and Google is no exception. However, you certainly don't want to import these files one by one, so you'll want to prepare a single file for Google to import. Google won't like that extra information Kerio includes, but other than that we can just glom everything together in one file. I did this using "sed" on a Linux version of Connect:
cat *eml | sed '/^Subject:/d;/^Date:/d;/^Content-.*:/d' > ~/t
You could write a Perl script to do something similar or just load them up in a text editor and delete the unneeded lines. Again, this is also the sort of thing you could farm out to any programmer: these are just text files and Gmail will happily import the data once you strip out the stuff that isn't vCard.
Moving Calendar Items
Once again, Kerio's use of text files and standard formats makes this easy. Kerio Calendar uses iCalendar and Google Calendar will import these. This does require a little more work, but it's nothing difficult for anyone who can do scripting. A Kerio Calendar entry looks like this:
Subject: pay sales tax Date: Wed, 21 Nov 2012 09:42:10 -0500 Content-Type: text/calendar; component="vevent"; method="PUBLISH"; charset="utf- 8" Content-Transfer-Encoding: 8bit BEGIN:VCALENDAR PRODID:-//Kerio Technologies//Outlook Connector//EN METHOD:PUBLISH VERSION:2.0 X-VERSION-KMS:6.2.0 BEGIN:VTIMEZONE TZID:Eastern Time (US & Canada) BEGIN:STANDARD DTSTART:20071104T020000 TZOFFSETTO:-0500 TZOFFSETFROM:-0400 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU END:STANDARD BEGIN:DAYLIGHT DTSTART:20070311T020000 TZOFFSETTO:-0400 TZOFFSETFROM:-0500 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU END:DAYLIGHT END:VTIMEZONE BEGIN:VEVENT DTSTAMP:20121017T151739Z UID:9a01b793-4d09-4685-848d-dc88d9cef6f5 DESCRIPTION:\n\n PRIORITY:5 SUMMARY:pay sales tax TRANSP:OPAQUE X-MICROSOFT-CDO-BUSYSTATUS:TENTATIVE X-LABEL:2 CLASS:PUBLIC SEQUENCE:1 ORGANIZER;CN="Linda Lawrence":mailto:[email protected] ATTENDEE;RSVP=TRUE;X-SENT=TRUE;CN=[email protected];CUTYPE=INDIVIDUAL:mailto:t [email protected] X-ALARM-TRIGGER:-P7196DT15H13M X-NEXT-ALARM:20121217T050000Z DTSTART;VALUE=DATE:20110718 DTEND;VALUE=DATE:20110721 X-MICROSOFT-CDO-ALLDAYEVENT:TRUE RRULE:FREQ=MONTHLY;BYMONTHDAY=18 PRIORITY:5 SUMMARY:pay sales tax TRANSP:OPAQUE X-MICROSOFT-CDO-BUSYSTATUS:TENTATIVE X-LABEL:2 CLASS:PUBLIC SEQUENCE:1 ORGANIZER;CN="Linda Lawrence":mailto:[email protected] ATTENDEE;RSVP=TRUE;X-SENT=TRUE;CN=[email protected];CUTYPE=INDIVIDUAL:mailto:t [email protected] X-ALARM-TRIGGER:-P7196DT15H13M X-NEXT-ALARM:20121217T050000Z DTSTART;VALUE=DATE:20110718 DTEND;VALUE=DATE:20110721 X-MICROSOFT-CDO-ALLDAYEVENT:TRUE RRULE:FREQ=MONTHLY;BYMONTHDAY=18 BEGIN:VALARM ACTION:DISPLAY DESCRIPTION:pay sales tax TRIGGER;RELATED=START:-P7196DT15H13M END:VALARM END:VEVENT END:VCALENDAR
What you need from each file is just the stuff that starts with "BEGIN:VEVENT" and goes through "END:VEVENT". You create a file that looks like this:
BEGIN:VCALENDAR PRODID:-//Kerio Technologies//Outlook Connector//EN METHOD:PUBLISH VERSION:2.0 (the VEVENTS will go here) END:VCALENDAR
and you put all the "BEGIN:VEVENT", "END:VEVENT" lines in as shown. Google Calendar will import that to a Calendar.
What about all the user names and aliases? Kerio Connect keeps these in an XML file (that's just text with some extra formatting) called "users.cfg". It contains every user along with the groups they belong to and any aliases. It doesn't require great programming skill to reformat that to whatever the receiving end might need (such as the CSV file needed for Google's IMAP transfer tool).
Unfortunately, single user Gmail doesn't support aliases. Google Apps does (they call these "nicknames") and you can bring these in using their GoogleApps Directory Sync capability, which requires an LDAP server. You may already be using that with Kerio, but if you are not, you'll want to look at Google Apps Provisioning API to create aliases and groups from the data contained in the Kerio "users.cfg" file.
I think that pretty well covers any type of transfer. If you have any other suggestions or tips, please leave them in the comments.
By the way, if you want to move you Kerio Connect to the cloud, I'm happy to help. There's no reason to learn a new email system or give up the features and support you get from us. You don't even necessarily need to be "in the cloud" right now - just ready to move should circumstances require it. I'm available to discuss this and other options, of course.
(OLDER) <- More Stuff -> (NEWER) (NEWEST)
Printer Friendly Version
Inexpensive and informative Apple related e-books:
Take Control of Upgrading to Mavericks
Take Control of Apple Mail, Second Edition
Digital Sharing Crash Course
Take Control of Podcasting on the Mac, Third Edition
Take Control of PDFpen 6