mirror of
https://github.com/nodemailer/wildduck.git
synced 2025-02-01 04:41:06 +08:00
Updated LMTP log entry from newest Received header
This commit is contained in:
parent
fbe37f7ffe
commit
0214cda968
2 changed files with 88 additions and 29 deletions
|
@ -91,7 +91,9 @@ class FilterHandler {
|
|||
return callback(null, false);
|
||||
}
|
||||
return db.users.collection('users').findOne(
|
||||
{ _id: addressData.user },
|
||||
{
|
||||
_id: addressData.user
|
||||
},
|
||||
{
|
||||
fields
|
||||
},
|
||||
|
@ -171,8 +173,12 @@ class FilterHandler {
|
|||
|
||||
db.database
|
||||
.collection('filters')
|
||||
.find({ user: userData._id })
|
||||
.sort({ _id: 1 })
|
||||
.find({
|
||||
user: userData._id
|
||||
})
|
||||
.sort({
|
||||
_id: 1
|
||||
})
|
||||
.toArray((err, filters) => {
|
||||
if (err) {
|
||||
// ignore, as filtering is not so important
|
||||
|
@ -394,36 +400,60 @@ class FilterHandler {
|
|||
skipExisting: true
|
||||
};
|
||||
|
||||
let received = [].concat((prepared.mimeTree.parsedHeader && prepared.mimeTree.parsedHeader.received) || []);
|
||||
if (received.length) {
|
||||
let receivedData = parseReceived(received[0]);
|
||||
|
||||
if (receivedData.has('with')) {
|
||||
messageOpts.meta.transtype = receivedData.get('with');
|
||||
}
|
||||
|
||||
if (receivedData.has('id')) {
|
||||
messageOpts.meta.queueId = receivedData.get('id');
|
||||
}
|
||||
|
||||
if (receivedData.has('from')) {
|
||||
messageOpts.meta.origin = receivedData.get('from');
|
||||
}
|
||||
}
|
||||
|
||||
if (outbound && outbound.length) {
|
||||
messageOpts.outbound = [].concat(outbound || []);
|
||||
}
|
||||
|
||||
this.messageHandler.encryptMessage(userData.encryptMessages ? userData.pubKey : false, { chunks, chunklen }, (err, encrypted) => {
|
||||
if (!err && encrypted) {
|
||||
messageOpts.prepared = this.messageHandler.prepareMessage({
|
||||
raw: Buffer.concat([extraHeader, encrypted]),
|
||||
indexedHeaders: this.spamHeaderKeys
|
||||
});
|
||||
messageOpts.maildata = this.messageHandler.indexer.getMaildata(messageOpts.prepared.mimeTree);
|
||||
}
|
||||
this.messageHandler.encryptMessage(
|
||||
userData.encryptMessages ? userData.pubKey : false,
|
||||
{
|
||||
chunks,
|
||||
chunklen
|
||||
},
|
||||
(err, encrypted) => {
|
||||
if (!err && encrypted) {
|
||||
messageOpts.prepared = this.messageHandler.prepareMessage({
|
||||
raw: Buffer.concat([extraHeader, encrypted]),
|
||||
indexedHeaders: this.spamHeaderKeys
|
||||
});
|
||||
messageOpts.maildata = this.messageHandler.indexer.getMaildata(messageOpts.prepared.mimeTree);
|
||||
}
|
||||
|
||||
this.messageHandler.add(messageOpts, (err, inserted, info) => {
|
||||
// push to response list
|
||||
callback(
|
||||
null,
|
||||
{
|
||||
userData,
|
||||
response: err ? err : 'Message stored as ' + info.id.toString()
|
||||
},
|
||||
!encrypted
|
||||
? {
|
||||
mimeTree: messageOpts.prepared.mimeTree,
|
||||
maildata: messageOpts.maildata
|
||||
}
|
||||
: false
|
||||
);
|
||||
});
|
||||
});
|
||||
this.messageHandler.add(messageOpts, (err, inserted, info) => {
|
||||
// push to response list
|
||||
callback(
|
||||
null,
|
||||
{
|
||||
userData,
|
||||
response: err ? err : 'Message stored as ' + info.id.toString()
|
||||
},
|
||||
!encrypted
|
||||
? {
|
||||
mimeTree: messageOpts.prepared.mimeTree,
|
||||
maildata: messageOpts.maildata
|
||||
}
|
||||
: false
|
||||
);
|
||||
});
|
||||
}
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -554,3 +584,32 @@ function prepareSpamChecks(spamHeader) {
|
|||
})
|
||||
.filter(check => check);
|
||||
}
|
||||
|
||||
function parseReceived(str) {
|
||||
let result = new Map();
|
||||
|
||||
str
|
||||
.trim()
|
||||
.replace(/[\r\n\s\t]+/g, ' ')
|
||||
.trim()
|
||||
.replace(/(^|\s+)(from|by|with|id|for)\s+([^\s]+)/gi, (m, p, k, v) => {
|
||||
let key = k.toLowerCase();
|
||||
let value = v;
|
||||
if (!result.has(key)) {
|
||||
result.set(key, value);
|
||||
}
|
||||
});
|
||||
|
||||
let date = str
|
||||
.split(';')
|
||||
.pop()
|
||||
.trim();
|
||||
if (date) {
|
||||
date = new Date(date);
|
||||
if (date.getTime()) {
|
||||
result.set('date', date);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
2
lmtp.js
2
lmtp.js
|
@ -168,7 +168,7 @@ const serverOptions = {
|
|||
chunklen,
|
||||
meta: {
|
||||
transactionId,
|
||||
source: 'LMTP',
|
||||
source: 'MX',
|
||||
from: sender,
|
||||
to: [recipient],
|
||||
origin: session.remoteAddress,
|
||||
|
|
Loading…
Reference in a new issue