fix(mail): preoperly generates the message-id header value

This commit is contained in:
Hivert Quentin
2025-07-28 17:40:14 +02:00
parent 4ef79e219c
commit 7bee193413
7 changed files with 45 additions and 11 deletions

View File

@@ -1627,7 +1627,7 @@ struct GlobalObjectId {
[map setObject: dateReceived forKey: @"date"]; [map setObject: dateReceived forKey: @"date"];
messageId = [NSString generateMessageID]; messageId = [NSString generateMessageID: [identity objectForKey: @"email"]];
[map setObject: messageId forKey: @"message-id"]; [map setObject: messageId forKey: @"message-id"];
attachmentKeys = [self fetchFileAttachmentKeys]; attachmentKeys = [self fetchFileAttachmentKeys];

View File

@@ -885,7 +885,7 @@
mailDate = [[NSCalendarDate date] rfc822DateString]; mailDate = [[NSCalendarDate date] rfc822DateString];
[headerMap setObject: mailDate forKey: @"date"]; [headerMap setObject: mailDate forKey: @"date"];
[headerMap setObject: subject forKey: @"subject"]; [headerMap setObject: subject forKey: @"subject"];
[headerMap setObject: [NSString generateMessageID] forKey: @"message-id"]; [headerMap setObject: [NSString generateMessageID: senderEmail] forKey: @"message-id"];
if ([msgType length] > 0) if ([msgType length] > 0)
[headerMap setObject: msgType forKey: @"x-sogo-message-type"]; [headerMap setObject: msgType forKey: @"x-sogo-message-type"];
msg = [NGMimeMessage messageWithHeader: headerMap]; msg = [NGMimeMessage messageWithHeader: headerMap];
@@ -974,7 +974,7 @@
[headerMap setObject: mailDate forKey: @"date"]; [headerMap setObject: mailDate forKey: @"date"];
[headerMap setObject: [[p getSubject] asQPSubjectString: @"UTF-8"] [headerMap setObject: [[p getSubject] asQPSubjectString: @"UTF-8"]
forKey: @"subject"]; forKey: @"subject"];
[headerMap setObject: [NSString generateMessageID] forKey: @"message-id"]; [headerMap setObject: [NSString generateMessageID: [[attendee mailAddress] pureEMailAddress]] forKey: @"message-id"];
[headerMap setObject: @"1.0" forKey: @"MIME-Version"]; [headerMap setObject: @"1.0" forKey: @"MIME-Version"];
if (textOnly) if (textOnly)
@@ -1163,7 +1163,7 @@
mailDate = [[NSCalendarDate date] rfc822DateString]; mailDate = [[NSCalendarDate date] rfc822DateString];
[headerMap setObject: mailDate forKey: @"date"]; [headerMap setObject: mailDate forKey: @"date"];
[headerMap setObject: [page getSubject] forKey: @"subject"]; [headerMap setObject: [page getSubject] forKey: @"subject"];
[headerMap setObject: [NSString generateMessageID] forKey: @"message-id"]; [headerMap setObject: [NSString generateMessageID: senderEmail] forKey: @"message-id"];
[headerMap setObject: @"1.0" forKey: @"MIME-Version"]; [headerMap setObject: @"1.0" forKey: @"MIME-Version"];
[headerMap setObject: @"text/html; charset=utf-8" [headerMap setObject: @"text/html; charset=utf-8"
forKey: @"content-type"]; forKey: @"content-type"];

View File

@@ -25,7 +25,7 @@
@interface NSString (SOGoExtension) @interface NSString (SOGoExtension)
+ (NSString *) generateMessageID; + (NSString *) generateMessageID: (NSString *) mailOrDomain;
- (NSString *) htmlToText; - (NSString *) htmlToText;
- (NSString *) htmlByExtractingImages: (NSMutableArray *) theImages; - (NSString *) htmlByExtractingImages: (NSMutableArray *) theImages;
- (NSString *) stringByConvertingCRLNToHTML; - (NSString *) stringByConvertingCRLNToHTML;

View File

@@ -560,15 +560,27 @@
@implementation NSString (SOGoExtension) @implementation NSString (SOGoExtension)
+ (NSString *) generateMessageID + (NSString *) generateMessageID: (NSString *) mailOrDomain
{ {
NSMutableString *messageID; NSMutableString *messageID;
NSString *pGUID; NSString *_domain;
NSRange r;
messageID = [NSMutableString string]; messageID = [NSMutableString string];
[messageID appendFormat: @"<%@", [SOGoObject globallyUniqueObjectId]]; [messageID appendFormat: @"<%@", [SOGoObject mailUniqueMessageId]];
pGUID = [[NSProcessInfo processInfo] globallyUniqueString]; if(mailOrDomain)
[messageID appendFormat: @"@%u>", (unsigned int)[pGUID hash]]; {
r = [mailOrDomain rangeOfString: @"@" options: NSBackwardsSearch];
if (r.location != NSNotFound)
{
//Its the full email not a domain
_domain = [mailOrDomain substringFromIndex: (r.location + r.length)];
}
else
_domain = mailOrDomain;
[messageID appendFormat: @"@%@>", _domain];
}
return [messageID lowercaseString]; return [messageID lowercaseString];
} }

View File

@@ -222,7 +222,7 @@ static NSString *userAgent = nil;
messageID = [headers objectForKey: @"message-id"]; messageID = [headers objectForKey: @"message-id"];
if (!messageID) if (!messageID)
{ {
messageID = [NSString generateMessageID]; messageID = [NSString generateMessageID: [[newHeaders objectForKey: @"from"] pureEMailAddress]];
[headers setObject: messageID forKey: @"message-id"]; [headers setObject: messageID forKey: @"message-id"];
} }

View File

@@ -48,6 +48,7 @@
@class NSException; @class NSException;
@class NSTimeZone; @class NSTimeZone;
@class NSURL; @class NSURL;
@class NSUUID;
@class WOContext; @class WOContext;
@class WORequest; @class WORequest;
@@ -74,6 +75,9 @@
+ (NSString *) globallyUniqueObjectId; + (NSString *) globallyUniqueObjectId;
- (NSString *) globallyUniqueObjectId; - (NSString *) globallyUniqueObjectId;
+ (NSString *) mailUniqueMessageId;
- (NSString *) mailUniqueMessageId;
+ (id) objectWithName: (NSString *)_name inContainer:(id)_container; + (id) objectWithName: (NSString *)_name inContainer:(id)_container;
- (id) initWithName: (NSString *) _name inContainer:(id)_container; - (id) initWithName: (NSString *) _name inContainer:(id)_container;

View File

@@ -20,6 +20,7 @@
*/ */
#import <unistd.h> #import <unistd.h>
#import <sys/random.h>
#import <NGObjWeb/SoClass.h> #import <NGObjWeb/SoClass.h>
@@ -111,11 +112,28 @@
pid, (int) f, sequence++, (int) rndm]; pid, (int) f, sequence++, (int) rndm];
} }
- (NSString *) globallyUniqueObjectId - (NSString *) globallyUniqueObjectId
{ {
return [[self class] globallyUniqueObjectId]; return [[self class] globallyUniqueObjectId];
} }
+ (NSString *) mailUniqueMessageId
{
/*
843F8180-4E33-7B0B-6F1B-9847CAD3E6EB
*/
return [[NSUUID UUID] UUIDString];
}
- (NSString *) mailUniqueMessageId
{
/*
843F8180-4E33-7B0B-6F1B-9847CAD3E6EB
*/
return [[self class] mailUniqueMessageId];
}
/* containment */ /* containment */
+ (id) objectWithName: (NSString *)_name inContainer:(id)_container + (id) objectWithName: (NSString *)_name inContainer:(id)_container