From dc869ce106dad20c0fc8595ae283e77de3042a64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Garc=C3=ADa=20S=C3=A1ez?= Date: Tue, 24 Mar 2015 18:05:58 +0100 Subject: [PATCH] oc-mail: Support for PidTagTransportMessageHeaders property This property is needed to show the 'Internet Headers' in Outlook. Outlook 2010 shows them in the properties dialog of a message. Outlook 2007 show them in message options section from context menu of a mail message. The property is defined in [MS-OXOMSG] section 2.2.1.61. The property is formed concatenating the mail message headers properly mime encoded. The headers are appended in no defined order. --- NEWS | 3 +++ OpenChange/MAPIStoreMailMessage.m | 36 +++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/NEWS b/NEWS index de3f185d6..35bba884d 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,9 @@ master ------ +New features + - Internet headers are now shown in Outlook + Enhancements - Sharing request among different Outlook versions - Improve sync speed from Outlook by non-reprocessing already downloaded unread mails diff --git a/OpenChange/MAPIStoreMailMessage.m b/OpenChange/MAPIStoreMailMessage.m index c0ca8f9b6..11eb24d03 100644 --- a/OpenChange/MAPIStoreMailMessage.m +++ b/OpenChange/MAPIStoreMailMessage.m @@ -32,6 +32,7 @@ #import #import #import +#import #import #import #import @@ -1396,6 +1397,41 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) : MAPISTORE_ERR_NOT_FOUND); } +- (int) getPidTagTransportMessageHeaders: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx +{ + NSDictionary *mailHeaders; + NSEnumerator *keyEnumerator; + NSMutableArray *headers; + NGMimeMessageGenerator *g; + NSString *headerKey, *fullHeader, *headerGenerated; + id headerValue; + NSData *headerData; + + /* Let's encode each mail header and put them on 'headers' array */ + mailHeaders = [sogoObject mailHeaders]; + headers = [NSMutableArray arrayWithCapacity: [mailHeaders count]]; + + g = [[NGMimeMessageGenerator alloc] init]; + keyEnumerator = [mailHeaders keyEnumerator]; + while ((headerKey = [keyEnumerator nextObject])) + { + headerValue = [mailHeaders objectForKey: headerKey]; + + headerData = [g generateDataForHeaderField: headerKey value: headerValue]; + headerGenerated = [[NSString alloc] initWithData: headerData encoding:NSUTF8StringEncoding]; + fullHeader = [NSString stringWithFormat:@"%@: %@", headerKey, headerGenerated]; + [headerGenerated release]; + + [headers addObject: fullHeader]; + } + [g release]; + + *data = [[headers componentsJoinedByString:@"\n"] asUnicodeInMemCtx: memCtx]; + + return MAPISTORE_SUCCESS; +} + - (void) getMessageData: (struct mapistore_message **) dataPtr inMemCtx: (TALLOC_CTX *) memCtx {