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 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;
}

View file

@ -168,7 +168,7 @@ const serverOptions = {
chunklen,
meta: {
transactionId,
source: 'LMTP',
source: 'MX',
from: sender,
to: [recipient],
origin: session.remoteAddress,