Skip to content

Commit 7bee193

Browse files
committed
fix(mail): preoperly generates the message-id header value
1 parent 4ef79e2 commit 7bee193

File tree

7 files changed

+45
-11
lines changed

7 files changed

+45
-11
lines changed

ActiveSync/SOGoMailObject+ActiveSync.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1627,7 +1627,7 @@ - (NSString *) storeMail: (NSDictionary *) theValues
16271627

16281628
[map setObject: dateReceived forKey: @"date"];
16291629

1630-
messageId = [NSString generateMessageID];
1630+
messageId = [NSString generateMessageID: [identity objectForKey: @"email"]];
16311631
[map setObject: messageId forKey: @"message-id"];
16321632

16331633
attachmentKeys = [self fetchFileAttachmentKeys];

SoObjects/Appointments/SOGoCalendarComponent.m

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -885,7 +885,7 @@ - (void) sendEMailUsingTemplateNamed: (NSString *) newPageName
885885
mailDate = [[NSCalendarDate date] rfc822DateString];
886886
[headerMap setObject: mailDate forKey: @"date"];
887887
[headerMap setObject: subject forKey: @"subject"];
888-
[headerMap setObject: [NSString generateMessageID] forKey: @"message-id"];
888+
[headerMap setObject: [NSString generateMessageID: senderEmail] forKey: @"message-id"];
889889
if ([msgType length] > 0)
890890
[headerMap setObject: msgType forKey: @"x-sogo-message-type"];
891891
msg = [NGMimeMessage messageWithHeader: headerMap];
@@ -974,7 +974,7 @@ - (void) _sendIMIPReplyForEvent: (iCalRepeatableEntityObject *) event
974974
[headerMap setObject: mailDate forKey: @"date"];
975975
[headerMap setObject: [[p getSubject] asQPSubjectString: @"UTF-8"]
976976
forKey: @"subject"];
977-
[headerMap setObject: [NSString generateMessageID] forKey: @"message-id"];
977+
[headerMap setObject: [NSString generateMessageID: [[attendee mailAddress] pureEMailAddress]] forKey: @"message-id"];
978978
[headerMap setObject: @"1.0" forKey: @"MIME-Version"];
979979

980980
if (textOnly)
@@ -1163,7 +1163,7 @@ - (void) sendReceiptEmailForObject: (iCalEntityObject *) object
11631163
mailDate = [[NSCalendarDate date] rfc822DateString];
11641164
[headerMap setObject: mailDate forKey: @"date"];
11651165
[headerMap setObject: [page getSubject] forKey: @"subject"];
1166-
[headerMap setObject: [NSString generateMessageID] forKey: @"message-id"];
1166+
[headerMap setObject: [NSString generateMessageID: senderEmail] forKey: @"message-id"];
11671167
[headerMap setObject: @"1.0" forKey: @"MIME-Version"];
11681168
[headerMap setObject: @"text/html; charset=utf-8"
11691169
forKey: @"content-type"];

SoObjects/Mailer/NSString+Mail.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525

2626
@interface NSString (SOGoExtension)
2727

28-
+ (NSString *) generateMessageID;
28+
+ (NSString *) generateMessageID: (NSString *) mailOrDomain;
2929
- (NSString *) htmlToText;
3030
- (NSString *) htmlByExtractingImages: (NSMutableArray *) theImages;
3131
- (NSString *) stringByConvertingCRLNToHTML;

SoObjects/Mailer/NSString+Mail.m

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -560,15 +560,27 @@ - (void) endCDATA
560560

561561
@implementation NSString (SOGoExtension)
562562

563-
+ (NSString *) generateMessageID
563+
+ (NSString *) generateMessageID: (NSString *) mailOrDomain
564564
{
565565
NSMutableString *messageID;
566-
NSString *pGUID;
566+
NSString *_domain;
567+
NSRange r;
567568

568569
messageID = [NSMutableString string];
569-
[messageID appendFormat: @"<%@", [SOGoObject globallyUniqueObjectId]];
570-
pGUID = [[NSProcessInfo processInfo] globallyUniqueString];
571-
[messageID appendFormat: @"@%u>", (unsigned int)[pGUID hash]];
570+
[messageID appendFormat: @"<%@", [SOGoObject mailUniqueMessageId]];
571+
if(mailOrDomain)
572+
{
573+
r = [mailOrDomain rangeOfString: @"@" options: NSBackwardsSearch];
574+
if (r.location != NSNotFound)
575+
{
576+
//Its the full email not a domain
577+
_domain = [mailOrDomain substringFromIndex: (r.location + r.length)];
578+
}
579+
else
580+
_domain = mailOrDomain;
581+
[messageID appendFormat: @"@%@>", _domain];
582+
}
583+
572584

573585
return [messageID lowercaseString];
574586
}

SoObjects/Mailer/SOGoDraftObject.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ - (void) setHeaders: (NSDictionary *) newHeaders
222222
messageID = [headers objectForKey: @"message-id"];
223223
if (!messageID)
224224
{
225-
messageID = [NSString generateMessageID];
225+
messageID = [NSString generateMessageID: [[newHeaders objectForKey: @"from"] pureEMailAddress]];
226226
[headers setObject: messageID forKey: @"message-id"];
227227
}
228228

SoObjects/SOGo/SOGoObject.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
@class NSException;
4949
@class NSTimeZone;
5050
@class NSURL;
51+
@class NSUUID;
5152

5253
@class WOContext;
5354
@class WORequest;
@@ -74,6 +75,9 @@
7475
+ (NSString *) globallyUniqueObjectId;
7576
- (NSString *) globallyUniqueObjectId;
7677

78+
+ (NSString *) mailUniqueMessageId;
79+
- (NSString *) mailUniqueMessageId;
80+
7781
+ (id) objectWithName: (NSString *)_name inContainer:(id)_container;
7882

7983
- (id) initWithName: (NSString *) _name inContainer:(id)_container;

SoObjects/SOGo/SOGoObject.m

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
*/
2121

2222
#import <unistd.h>
23+
#import <sys/random.h>
2324

2425

2526
#import <NGObjWeb/SoClass.h>
@@ -111,11 +112,28 @@ + (NSString *) globallyUniqueObjectId
111112
pid, (int) f, sequence++, (int) rndm];
112113
}
113114

115+
114116
- (NSString *) globallyUniqueObjectId
115117
{
116118
return [[self class] globallyUniqueObjectId];
117119
}
118120

121+
+ (NSString *) mailUniqueMessageId
122+
{
123+
/*
124+
843F8180-4E33-7B0B-6F1B-9847CAD3E6EB
125+
*/
126+
return [[NSUUID UUID] UUIDString];
127+
}
128+
129+
- (NSString *) mailUniqueMessageId
130+
{
131+
/*
132+
843F8180-4E33-7B0B-6F1B-9847CAD3E6EB
133+
*/
134+
return [[self class] mailUniqueMessageId];
135+
}
136+
119137
/* containment */
120138

121139
+ (id) objectWithName: (NSString *)_name inContainer:(id)_container

0 commit comments

Comments
 (0)