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"];
messageId = [NSString generateMessageID];
messageId = [NSString generateMessageID: [identity objectForKey: @"email"]];
[map setObject: messageId forKey: @"message-id"];
attachmentKeys = [self fetchFileAttachmentKeys];

View File

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

View File

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

View File

@@ -560,15 +560,27 @@
@implementation NSString (SOGoExtension)
+ (NSString *) generateMessageID
+ (NSString *) generateMessageID: (NSString *) mailOrDomain
{
NSMutableString *messageID;
NSString *pGUID;
NSString *_domain;
NSRange r;
messageID = [NSMutableString string];
[messageID appendFormat: @"<%@", [SOGoObject globallyUniqueObjectId]];
pGUID = [[NSProcessInfo processInfo] globallyUniqueString];
[messageID appendFormat: @"@%u>", (unsigned int)[pGUID hash]];
[messageID appendFormat: @"<%@", [SOGoObject mailUniqueMessageId]];
if(mailOrDomain)
{
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];
}

View File

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

View File

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

View File

@@ -20,6 +20,7 @@
*/
#import <unistd.h>
#import <sys/random.h>
#import <NGObjWeb/SoClass.h>
@@ -111,11 +112,28 @@
pid, (int) f, sequence++, (int) rndm];
}
- (NSString *) 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 */
+ (id) objectWithName: (NSString *)_name inContainer:(id)_container