Skip to content
This repository has been archived by the owner on Nov 4, 2024. It is now read-only.

Commit

Permalink
Improved MIME email addresses parse info
Browse files Browse the repository at this point in the history
  • Loading branch information
the-djmaze committed Feb 4, 2024
1 parent ec9197c commit be8d302
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 12 deletions.
15 changes: 9 additions & 6 deletions dev/Mime/Parser.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,13 @@ export function ParseMime(text)
this.boundary = '';
this.bodyText = '';
// https://datatracker.ietf.org/doc/html/rfc2822#section-3.6
// https://datatracker.ietf.org/doc/html/rfc4021
this.headers = {
// Required
date = null,
from = [], // mailbox-list
// Optional
sender = [], // MUST occur with multi-address
sender = [], // mailbox MUST occur with multi-address
'reply-to' = [], // address-list
to = [], // address-list
cc = [], // address-list
Expand All @@ -34,21 +35,22 @@ export function ParseMime(text)
comments = [], // unstructured
keywords = [], // phrase *("," phrase)
// https://datatracker.ietf.org/doc/html/rfc2822#section-3.6.6
trace = [],
'resent-date' = [],
'resent-from' = [],
'resent-sender' = [],
'resent-to' = [],
'resent-cc' = [],
'resent-bcc' = [],
'resent-msg-id' = [],
// https://datatracker.ietf.org/doc/html/rfc2822#section-3.6.7
trace = [],
'return-path' = '', // angle-addr
received = [],
// optional others outside RFC2822
'mime-version' = '',
'mime-version' = '', // RFC2045
'content-transfer-encoding' = '',
'content-type' = '',
'delivered-to' = '', // angle-addr
'return-path' = '', // angle-addr
'received' = [],
'delivered-to' = [], // RFC9228 addr-spec
'authentication-results' = '', // dkim, spf, dmarc
'dkim-signature' = '',
'x-rspamd-queue-id' = '',
Expand All @@ -57,6 +59,7 @@ export function ParseMime(text)
'x-rspamd-server' = '',
'x-spamd-result' = '',
'x-remote-address' = '',
// etc.
};
}
*/
Expand Down
1 change: 0 additions & 1 deletion dev/Mime/Utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,6 @@ export function MimeToMessage(data, message)
const text = struct.getByContentType('text/plain');
message.plain(text ? text.body : '');
message.html(html);
console.dir({message});
} else {
message.plain(data);
}
Expand Down
20 changes: 20 additions & 0 deletions dev/Model/EmailCollection.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,4 +52,24 @@ export class EmailCollectionModel extends AbstractCollectionModel
}
}

/**
* @param {array} [{name: "Name", email: "address@domain"}]
*/
/*
static fromArray(addresses) {
let list = new this();
list.fromArray(addresses);
return list;
}
fromArray(addresses) {
addresses.forEach(item => {
item = new EmailModel(item.email, item.name);
// Make them unique
if (item.email && item.name || !this.find(address => address.email == item.email)) {
this.push(item);
}
});
}
*/

}
10 changes: 5 additions & 5 deletions dev/Model/Message.js
Original file line number Diff line number Diff line change
Expand Up @@ -235,11 +235,11 @@ export class MessageModel extends AbstractModel {
this.messageId = headers.valueByName('Message-Id');
this.subject(headers.valueByName('Subject'));
this.sender = EmailCollectionModel.fromString(headers.valueByName('Sender'));
this.from = EmailCollectionModel.fromString(headers.valueByName('From'));
this.replyTo = EmailCollectionModel.fromString(headers.valueByName('Reply-To'));
this.to = EmailCollectionModel.fromString(headers.valueByName('To'));
this.cc = EmailCollectionModel.fromString(headers.valueByName('Cc'));
this.bcc = EmailCollectionModel.fromString(headers.valueByName('Bcc'));
this.from = EmailCollectionModel.fromArray(headers.valueByName('From'));
this.replyTo = EmailCollectionModel.fromArray(headers.valueByName('Reply-To'));
this.to = EmailCollectionModel.fromArray(headers.valueByName('To'));
this.cc = EmailCollectionModel.fromArray(headers.valueByName('Cc'));
this.bcc = EmailCollectionModel.fromArray(headers.valueByName('Bcc'));
this.inReplyTo = headers.valueByName('In-Reply-To');
this.deliveredTo = EmailCollectionModel.fromString(headers.valueByName('Delivered-To'));
Expand Down

0 comments on commit be8d302

Please sign in to comment.