From 2d9a70944beb3b43bdc506694286bc833da971e4 Mon Sep 17 00:00:00 2001 From: root Date: Sun, 30 Oct 2022 16:55:54 +0100 Subject: [PATCH] fix(eas) use bare email address (fixes #5612) --- ActiveSync/NGMimeMessage+ActiveSync.h | 2 +- ActiveSync/NGMimeMessage+ActiveSync.m | 57 +++++++++++++-------------- ActiveSync/SOGoActiveSyncDispatcher.m | 4 +- 3 files changed, 31 insertions(+), 32 deletions(-) diff --git a/ActiveSync/NGMimeMessage+ActiveSync.h b/ActiveSync/NGMimeMessage+ActiveSync.h index 4a319da0f..3e2258253 100644 --- a/ActiveSync/NGMimeMessage+ActiveSync.h +++ b/ActiveSync/NGMimeMessage+ActiveSync.h @@ -36,7 +36,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. @interface NGMimeMessage (ActiveSync) -- (NSArray *) allRecipients; +- (NSArray *) allBareRecipients; @end diff --git a/ActiveSync/NGMimeMessage+ActiveSync.m b/ActiveSync/NGMimeMessage+ActiveSync.m index 9286d3653..2d5f3017c 100644 --- a/ActiveSync/NGMimeMessage+ActiveSync.m +++ b/ActiveSync/NGMimeMessage+ActiveSync.m @@ -38,39 +38,38 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. @implementation NGMimeMessage (ActiveSync) -- (void) _addRecipients: (NSEnumerator *) enumerator - toArray: (NSMutableArray *) recipients -{ - NGMailAddressParser *parser; - NSEnumerator *addressList; - NGMailAddress *address; - NSString *s; - - while ((s = [enumerator nextObject])) - { - parser = [NGMailAddressParser mailAddressParserWithString: s]; - addressList = [[parser parseAddressList] objectEnumerator]; - - while ((address = [addressList nextObject])) - [recipients addObject: [address address]]; - } -} - - (NSArray *) allRecipients { - NSMutableArray *recipients; + NSMutableArray *allRecipients; + NSArray *recipients; + NSString *fieldNames[] = {@"to", @"cc", @"bcc"}; + unsigned int count; - recipients = [NSMutableArray array]; + allRecipients = [NSMutableArray arrayWithCapacity: 16]; - [self _addRecipients: [[self headersForKey: @"to"] objectEnumerator] - toArray: recipients]; + for (count = 0; count < 3; count++) + { + recipients = [self headersForKey: fieldNames[count]]; + if ([recipients count] > 0) + [allRecipients addObjectsFromArray: recipients]; + } - [self _addRecipients: [[self headersForKey: @"cc"] objectEnumerator] - toArray: recipients]; - - [self _addRecipients: [[self headersForKey: @"bcc"] objectEnumerator] - toArray: recipients]; - - return recipients; + return allRecipients; } + +- (NSArray *) allBareRecipients +{ + NSMutableArray *bareRecipients; + NSEnumerator *allRecipients; + NSString *recipient; + + bareRecipients = [NSMutableArray array]; + + allRecipients = [[self allRecipients] objectEnumerator]; + while ((recipient = [allRecipients nextObject])) + [bareRecipients addObject: [recipient pureEMailAddress]]; + + return bareRecipients; +} + @end diff --git a/ActiveSync/SOGoActiveSyncDispatcher.m b/ActiveSync/SOGoActiveSyncDispatcher.m index 6428118d1..6266b865e 100644 --- a/ActiveSync/SOGoActiveSyncDispatcher.m +++ b/ActiveSync/SOGoActiveSyncDispatcher.m @@ -3617,7 +3617,7 @@ void handle_eas_terminate(int signum) } error = [self _sendMail: data - recipients: [message allRecipients] + recipients: [message allBareRecipients] saveInSentItems: ([(id)[theDocumentElement getElementsByTagName: @"SaveInSentItems"] count] ? YES : NO)]; if (error) @@ -4178,7 +4178,7 @@ void handle_eas_terminate(int signum) data = [generator generateMimeFromPart: messageToSend]; error = [self _sendMail: data - recipients: [messageFromSmartForward allRecipients] + recipients: [messageFromSmartForward allBareRecipients] saveInSentItems: ([(id)[theDocumentElement getElementsByTagName: @"SaveInSentItems"] count] ? YES : NO)]; if (error)