mirror of
https://github.com/nodemailer/wildduck.git
synced 2025-02-01 12:50: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 callback(null, false);
|
||||||
}
|
}
|
||||||
return db.users.collection('users').findOne(
|
return db.users.collection('users').findOne(
|
||||||
{ _id: addressData.user },
|
{
|
||||||
|
_id: addressData.user
|
||||||
|
},
|
||||||
{
|
{
|
||||||
fields
|
fields
|
||||||
},
|
},
|
||||||
|
@ -171,8 +173,12 @@ class FilterHandler {
|
||||||
|
|
||||||
db.database
|
db.database
|
||||||
.collection('filters')
|
.collection('filters')
|
||||||
.find({ user: userData._id })
|
.find({
|
||||||
.sort({ _id: 1 })
|
user: userData._id
|
||||||
|
})
|
||||||
|
.sort({
|
||||||
|
_id: 1
|
||||||
|
})
|
||||||
.toArray((err, filters) => {
|
.toArray((err, filters) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
// ignore, as filtering is not so important
|
// ignore, as filtering is not so important
|
||||||
|
@ -394,36 +400,60 @@ class FilterHandler {
|
||||||
skipExisting: true
|
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) {
|
if (outbound && outbound.length) {
|
||||||
messageOpts.outbound = [].concat(outbound || []);
|
messageOpts.outbound = [].concat(outbound || []);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.messageHandler.encryptMessage(userData.encryptMessages ? userData.pubKey : false, { chunks, chunklen }, (err, encrypted) => {
|
this.messageHandler.encryptMessage(
|
||||||
if (!err && encrypted) {
|
userData.encryptMessages ? userData.pubKey : false,
|
||||||
messageOpts.prepared = this.messageHandler.prepareMessage({
|
{
|
||||||
raw: Buffer.concat([extraHeader, encrypted]),
|
chunks,
|
||||||
indexedHeaders: this.spamHeaderKeys
|
chunklen
|
||||||
});
|
},
|
||||||
messageOpts.maildata = this.messageHandler.indexer.getMaildata(messageOpts.prepared.mimeTree);
|
(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) => {
|
this.messageHandler.add(messageOpts, (err, inserted, info) => {
|
||||||
// push to response list
|
// push to response list
|
||||||
callback(
|
callback(
|
||||||
null,
|
null,
|
||||||
{
|
{
|
||||||
userData,
|
userData,
|
||||||
response: err ? err : 'Message stored as ' + info.id.toString()
|
response: err ? err : 'Message stored as ' + info.id.toString()
|
||||||
},
|
},
|
||||||
!encrypted
|
!encrypted
|
||||||
? {
|
? {
|
||||||
mimeTree: messageOpts.prepared.mimeTree,
|
mimeTree: messageOpts.prepared.mimeTree,
|
||||||
maildata: messageOpts.maildata
|
maildata: messageOpts.maildata
|
||||||
}
|
}
|
||||||
: false
|
: false
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
}
|
||||||
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -554,3 +584,32 @@ function prepareSpamChecks(spamHeader) {
|
||||||
})
|
})
|
||||||
.filter(check => check);
|
.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,
|
chunklen,
|
||||||
meta: {
|
meta: {
|
||||||
transactionId,
|
transactionId,
|
||||||
source: 'LMTP',
|
source: 'MX',
|
||||||
from: sender,
|
from: sender,
|
||||||
to: [recipient],
|
to: [recipient],
|
||||||
origin: session.remoteAddress,
|
origin: session.remoteAddress,
|
||||||
|
|
Loading…
Reference in a new issue