Updated LMTP log entry from newest Received header

This commit is contained in:
Andris Reinman 2017-10-20 14:39:20 +03:00
parent fbe37f7ffe
commit 0214cda968
2 changed files with 88 additions and 29 deletions

View file

@ -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,11 +400,34 @@ 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(
userData.encryptMessages ? userData.pubKey : false,
{
chunks,
chunklen
},
(err, encrypted) => {
if (!err && encrypted) { if (!err && encrypted) {
messageOpts.prepared = this.messageHandler.prepareMessage({ messageOpts.prepared = this.messageHandler.prepareMessage({
raw: Buffer.concat([extraHeader, encrypted]), raw: Buffer.concat([extraHeader, encrypted]),
@ -423,7 +452,8 @@ class FilterHandler {
: 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;
}

View file

@ -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,