У меня есть приложение, которое запускает 9 прослушивателей почты, используя node-imap. Когда новое письмо приходит к одному из писем, я перемещаю его в нужное поле в соответствии с его заголовком и содержанием. Проблема в том, что не все письма перемещены правильно. Я объясню больше после кода:
function sortEmails (imap, box) {
let emails = [];
let lead;
let site, date;
if (box.messages.total) {
// fetch all of the current inbox's mails
var imapFetch = imap.seq.fetch(`1:${box.messages.total}`, {
bodies: ['HEADER.FIELDS (FROM TO SUBJECT DATE)', 'TEXT'] // Get headers, body and struct
});
// For each message get the data
imapFetch.on('message', function(msg) {
msg.on('body', function(stream, info) {
stream.setEncoding('utf8');
var buffer = '';
stream.on('data', function(chunk) {
buffer += chunk.toString('utf8');
});
// Once done, check if lead or not, and act accordingly.
stream.once('end', function() {
// If header
if (info.which !== 'TEXT') {
let header = Imap.parseHeader(buffer);
// If lead, set date & site of lead.
if (header.subject[0] === 'Lead') {
site = header.from[0].slice(header.from[0].indexOf("@") + 1, -1);
date = header.date[0];
};
// If body
} else {
// if lead (spam leads included) and not regular mail.
if (site && date) {
body = parseMailBody(buffer);
// Create a new lead
lead = new Lead(body.name, body.email, body.phone, date, site, body.url, body.ip);
if (lead.isRealLead()) {
emails.push(lead);
} else {
lead = 'spam';
}
}
}
});
});
msg.once('attributes', function(attrs) {
if (!lead) {
imap.move(attrs.uid, imap.boxes.all, function(err) {
if (err) {
logger.log('error', 'Mail Listeners', 'Move error: ' + err);
}
});
} else if (lead === 'spam') {
imap.move(attrs.uid, imap.boxes.spamLeads, function(err) {
if (err) {
logger.log('error', 'Mail Listeners', 'Move error: ' + err);
}
});
} else {
imap.move(attrs.uid, imap.boxes.leads, function(err) {
if (err) {
logger.log('error', 'Mail Listeners', 'Move error: ' + err);
}
});
}
});
});
imapFetch.once('error', function(err) {
logger.log('error', 'Mail Listeners', 'Fetch error: ' + err);
});
imapFetch.once('end', function() {
if (emails.length !== 0) {
sendBotMessage(`A new lead has just arrived.`);
sendToDB(emails);
}
});
}
}
Обычно, если письмо не имеет заголовка «Ведущий», оно будет перемещено в каталог «ALL» . Кроме того, письма, которые имеют заголовок «Lead» и содержат только английские символы, будут помечены как спам.
Проблема в том, что некоторые письма, которые являются ведущими (содержат заголовок "Lead" и имена не на английском языке), перемещаются в папку 'ALL' , указывая (! привести) верно.
Письма получены из формы CF7 в Wordpress. Это MIME письма, которое не было перемещено правильно:
Return-Path: <my@host.co.il>
Delivered-To: my@mail.co.il
Received: from s-inbox.upress.io
by s-inbox.upress.io with LMTP
id OKTqFcSEIFzwBwAAmWbRAw
(envelope-from <my@host.co.il>)
for <my@mail.co.il>; Mon, 24 Dec 2018 09:03:32 +0200
Return-path: <my@host.co.il>
Envelope-to: my@mail.co.il
Delivery-date: Mon, 24 Dec 2018 09:03:32 +0200
Received: from my@host.co.il ([myip])
by s-inbox.upress.io with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256)
(Exim 4.90_1)
(envelope-from <my@host.co.il>)
id 1gbKGy-0000tR-6i
for my@mail.co.il; Mon, 24 Dec 2018 09:03:32 +0200
Received: from hostname by my@host.co.il with local (Exim 4.87)
(envelope-from <my@host.co.il>)
id 1gbKGw-0000Lk-Oz
for my@mail.co.il; Mon, 24 Dec 2018 09:03:30 +0200
To: my@mail.co.il
Subject: Lead
X-PHP-Originating-Script: 1029:class-phpmailer.php
Date: Mon, 24 Dec 2018 07:03:30 +0000
From: WordPress <admin@domain.co.il>
Reply-To: test@gmail.com
Message-ID: <7b2769f42336ec7bf49edce68de30074@domain.co.il>
X-Mailer: PHPMailer 5.2.22 (https://github.com/PHPMailer/PHPMailer)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Sender: <my@host.co.il>
SPFCheck: Server passes SPF test, -30 Spam score
Forward-Confirmed-ReverseDNS: Reverse and forward lookup success on 185.217.97.242, -10 Spam score
SpamTally: Final spam score: -40
name: בדיקה
mail: test@gmail.com
phone: 0435599539
ip: 84.108.61.243
url: https://myurl.co.il/
Я немного новичок в концепции потоков в целом и imap в частности, и я не могу понять, в чем здесь проблема.
Спасибо, что уделили мне время.