0

Our solution needs to understand Exchange Fast Transfer Stream like the m:data at below for calendar:

    <m:ExportItemsResponseMessage ResponseClass="Success">
      <m:ResponseCode>NoError</m:ResponseCode>
      <m:ItemId Id="AAMkAGYzZjZmRiUsidkC+NAAAAY89GAAA=" ChangeKey="FwAAAA=="/>
      <m:Data>
        AQAAAAgAAAAAAAAALgBlAHgAdABlAHMAdAAuAG0AaQBjAHIAbwBzAG8AZgB0AC4A
        YwBvAG0AAABTAE0AVABQAAAAVQBzAGUAcgAyAEAAYQB1AGoAaQBuAGcALQBkAG8AbQAuAGUA
        eAB0AGUAcwB0AC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAAALCE/jlMAAAAVQBzAGUA
        cgAyAEAAYQB1AGoAaQBuAGcALQBkAG8AbQAuAGUAeAB0AGUAcwB0AC4AbQBpAGMAcgBvAHMA
        bwBmAHQALgBjAG8AbQAAAAMAADkAAAAAAwD+DwYAAAADAARAAwACQAMADkA=
      </m:Data>
    </m:ExportItemsResponseMessage>

I found out that MS protocol document around this [MS-OXWSBTRF]: Bulk Transfer Web Service Protocol, however it doesn't talk about how to parse the m:Data element. I did base64 decoding on it and it would become partially readable although not all the information though. I also found this link Exchange 2010 EWS ExportItems Data field where a parser was written by Glen Scales although it is not available at CodePlex any more. I also found out outlook redemption could import this into outlook although I didn't see if it could parse it and make it available for our program to use. Plus it would require outlook installation.

Any insights would be highly appreciated.

[Update on Aug 27]. Our goal is to be able to move calendars from other platforms such as google and yahoo into Exchange Online. When we created the appointment for both organizer and attendee via EWS, we are facing some challenges in reestablish the relationship and we are seeing this issue when organizer sends update to attendee.

Basically attendee would see the message "The meeting request was updated after this message was sent. You should open a later update or open the item on the calendar" for both update and cancel message. Any insights here for what MAPI properties to fix would be greatly appreciated as well. cancel update

However we are able to move calendars successful with Exchange Web Services export and import via FTS and that is why we are looking for how to generate FTS stream via Outlook Redemption and then use EWS to import those FTS data into Exchange Online side.

However if outlook redemption could allow us to import ics file directly into end user mailbox, that would be even better where we found out that service account needs full access to all mailboxes. From my manual testing, manual importing ics files into both organizer and attendee mailbox are able to re-establish the relationship. Again, it would be really appreciated for any suggestions for above "The meeting request was updated after this message was sent. You should open a later update or open the item on the calendar".

windfly2006
  • 1,703
  • 3
  • 25
  • 48
  • for the message "The meeting request was updated after this message was sent. You should open a later update or open the item on the calendar", we figured out that it is related with MeetingType although we don't know how to fix yet – windfly2006 Aug 27 '20 at 20:26

1 Answers1

1

The format is indeed undocumented. It is essentially a list of properties separated by page breaks (to be able to send/receive it in chunks while parsing).

Redemption (I am its author) supports that format through RDOMail.SaveAs / Import; the format type is olFTS.

You can also see the FST data in OutlookSpy (I am also its author) - click GetItem button on the EWS section of the OutlookSpy ribbon, go to the ExportItems tab. To import an FTS stream, click GetFolder | UploadItems.

Dmitry Streblechenko
  • 62,942
  • 4
  • 53
  • 78
  • Thanks Dmitry. I am able to see those. Could Redemption help us to convert calendar from other platforms such as yahoo or gmail into FTS which we would like to import into exchange server? – windfly2006 Aug 20 '20 at 21:02
  • That depends on the format - are you getting ICS files? You can create an intermediary MSG file using RDOsession.CreateMessageFromMsgFile, import the ICS file (RDOMail.Import), save the MSG file (RDOMail.Save) then save in the FTS format using RDOMail.SaveAs. – Dmitry Streblechenko Aug 20 '20 at 22:12
  • we could get ics file. Our challenge is that we have service account which we would need to migrate calendars for different end users. To use the redemption API here, we would need to initiate the outlook profile for each individual user while we don't have their password. – windfly2006 Aug 24 '20 at 19:04
  • 1
    When you work with standalone MSG files, not active session or even a profile is necessary - RDOSession.CreateMessageFromMsgFile works without logging in. Import and SaveAs will work fine as long as your code does not touch something that requires an active session, such as accessing address book objects. Even RDOMail.Sender etc. properties are designed to work without an active session as long as the address book entry id is a one-off SMTP entry. – Dmitry Streblechenko Aug 24 '20 at 22:04
  • Thanks. we did some testing, it looks like that service account requires full access to do this although generally we only ask for ApplicationImpersonation since customer is not always comfortable for giving out full access rights to service account.. Could we get redemption working in this case with ApplicationImpersonation role? Or we are missing something here? – windfly2006 Aug 26 '20 at 20:07
  • Do you mean for Exchange Server? I am not sure I understand - RDOSession.CreateMessageFromMsgFile and RDOMail.Import / SaveAs work do not depend on an Exchange Server. – Dmitry Streblechenko Aug 27 '20 at 01:03
  • sorry for confusion. please see my update to my original question with more information. – windfly2006 Aug 27 '20 at 19:19
  • Have you tried to look at the problematic appointment with OutlookSpy to see if there is a property with the last update? – Dmitry Streblechenko Aug 27 '20 at 22:18
  • thanks. I am going to accept this as the answer since this answers my original question for how to understand FTS. Outlookspy is the savior here. :-) – windfly2006 Sep 10 '20 at 21:16