Featured Post

How the Sumatra Double-Booking cmdlet works

First: you can always get help at the PowerShell prompt with: get-help Get-suDoubleBookedMeetings Let's say that we have the followin...

Wednesday, September 10, 2008

Migrate calendar data from Exchange 2003 to iCalendar via the M: drive

We did a little bit on this a while ago and never saw the need to take it much further, but we figured we'd sketch it here in case anybody else wanted to take this as a launch point.

Suppose you want to migrate your calendar data to Zimbra (or some other place that takes in iCalendar format) from Exchange 2000/2003 under your direct control? Note: For Exchange 2007 you are out of luck with this method (no access to the M: drive).

So instead, expose the M: drive. One of our previous posts tells you how.

You'll be able to drill down to the Calendar folder and see all your appointments and meetings as .EML files. Believe it or not embedded in these EMLs is all the ICS data you need to insert into Zimbra (I'm not promising you're not going to have to modify it, but it's there).


So let's look at one of them.










Received: by trout.sumatra.local id <01C894A4.D2E612E0@trout.sumatra.local>; Wed, 2 Apr 2008 05:35:01 -0400



Content-class: urn:content-classes:appointment



Subject: private noon



Date: Wed, 2 Apr 2008 05:35:01 -0400



Message-ID: <F47225046904E34AAA50D7CFB96277FC03AED5@trout.sumatra.local>



X-MS-Has-Attach:



MIME-Version: 1.0



Content-Type: multipart/alternative; boundary="----_=_NextPart_001_01C894A4.D2E612E0"



X-MS-TNEF-Correlator:



Thread-Topic: private noon



Thread-Index: AciUpNLoQOwqLSklRJaoHMVqqUnkhQ==



Sensitivity: Private



x-mimeole: Produced By Microsoft Exchange V6.5



From: "zyg furmaniuk" <zyg@sumatra.local>
This is a multi-part message in MIME format.
------_=_NextPart_001_01C894A4.D2E612E0Content-Type: text/html; charset="iso-8859-1"Content-Transfer-Encoding: binary
------_=_NextPart_001_01C894A4.D2E612E0Content-class: urn:content-classes:appointmentContent-Type: text/calendar; method=REQUEST; charset="utf-8"Content-Transfer-Encoding: 8bit
BEGIN:VCALENDAR


METHOD:REQUEST


PRODID:Microsoft CDO for Microsoft Exchange


VERSION:2.0


BEGIN:VTIMEZONE


TZID:(GMT-05.00) Eastern Time (US & Canada)


X-MICROSOFT-CDO-TZID:10


BEGIN:STANDARDDTSTART:16010101T020000TZOFFSETFROM:-0400TZOFFSETTO:-0500RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=11;BYDAY=1SUEND:STANDARDBEGIN:DAYLIGHTDTSTART:16010101T020000TZOFFSETFROM:-0500TZOFFSETTO:-0400RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=3;BYDAY=2SUEND:DAYLIGHTEND:VTIMEZONEBEGIN:VEVENTDTSTAMP:20080414T173637ZDTSTART;TZID="(GMT-05.00) Eastern Time (US & Canada)":20080402T120000


SUMMARY:private noon


UID:040000008200E00074C5B7101A82E00800000000E072D44B8394C801000000000000000 0100000002D6C78C6FF3E504D8F29FB17733C0F74


ORGANIZER;CN="zyg furmaniuk":MAILTO:zyg@sumatra.local


LOCATION:


DTEND;TZID="(GMT-05.00) Eastern Time (US & Canada)":20080402T130000


SEQUENCE:0


PRIORITY:5


CLASS:Private


CREATED:20080402T093448Z


LAST-MODIFIED:20080402T093501Z


STATUS:TENTATIVE


TRANSP:OPAQUE


X-MICROSOFT-CDO-BUSYSTATUS:BUSY


X-MICROSOFT-CDO-INSTTYPE:0


X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY


X-MICROSOFT-CDO-ALLDAYEVENT:FALSE


X-MICROSOFT-CDO-IMPORTANCE:1


X-MICROSOFT-CDO-OWNERAPPTID:-1


X-MICROSOFT-CDO-APPT-SEQUENCE:0


X-MICROSOFT-CDO-ATTENDEE-CRITICAL-CHANGE:20080402T093501Z


BEGIN:VALARM


ACTION:DISPLAY


DESCRIPTION:REMINDER


TRIGGER;RELATED=START:-PT05H00M00S


END:VALARM


END:VEVENT


END:VCALENDAR
------_=_NextPart_001_01C894A4.D2E612E0--




So you remove everything that is not iCalendar (i.e., the email header and that small footer following the END:VCALENDAR) and swap out your email address or domain if necessary. I didn't in the example that follows and it didn't come in properly.

Upload to Zimbra using something like curl, and your before and after shots look like this:





Keep in mind, this will happen one meeting or activity at a time.

Have we rigorously tested every aspect of this? HECK NO! But this gave us enough to go on that we knew if we needed to modify something (like possibly recurrence patterns, exceptions, or maybe the GUID format) that we'd able to figure it out. Again, this is meant to suggest a more general methodology for moving calendar data out of Exchange 2000/2003.

Of course you can do pretty much the same thing with your email as well. We tested that and got attachments to come over. BUT, we learned to add an additional tag X-Zimbra-Received as per this article.

For a masterful discussion of using the M: drive in Exchange for a migration see: Migrating from POP3/SMTP servers using the M Drive

No comments: