Node-imap отправляет электронные письма, но не сохраняет их в Sent
В последнее время я использую node-imap и пытаюсь реализовать отправку электронных писем. Вот код на перьях / узлах:
create(data, params) {
return new Promise((resolve, reject) => {
// create reusable transporter object using the default SMTP transport
let transporter = nodemailer.createTransport({
host: this.host,
port: this.smtpPort,
secure: false, // true for 465, false for other ports,
tls: {
rejectUnauthorized: false
},
auth: {
user: this.emailUsername, // generated ethereal user
pass: this.emailPassword // generated ethereal password
}
});
// setup email data with unicode symbols
let mailOptions = {
from: this.emailUsername, // sender address
to: data.to, // list of receivers
subject: data.subject, // Subject line
text: data.body, // plain text body
html: data.body // html body
};
// send mail with defined transport object
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
reject(error);
//console.log(error);
}
//console.log('Message sent: %s', info.messageId);
return resolve(info);
});
});
}
этот код работает нормально и отправляет электронную почту, как и должно, но после того, как он выполняет свою работу, я не могу найти эти электронные письма в поле "Отправлено"... кто-нибудь сталкивался с node-imap, что я пропустил? Приветствия.
РЕДАКТИРОВАТЬ:: Только что понял, что он сохраняет для некоторых поставщиков электронной почты (Gmail, Hotmail), но для некоторых других это не так. Так что, я думаю, я ничего не пропускаю... но как я могу сохранить это вручную для других провайдеров, которые не делают это автоматически.
1 ответ
Кажется, проблема заключалась в том, что провайдер электронной почты стал причиной того, что этот код прекрасно работает для Gmail или Hotmail... поэтому я вручную добавил письмо в поле "Отправлено" после того, как оно уже было отправлено для этого определенного провайдера электронной почты… вот код, если таковой имеется1 необходимо:
// send mail with defined transport object
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
reject(error);
//console.log(error);
}
if (checkEmail(userEmail) == 'linksoft') {
imap.once('ready', function () {
imap.openBox('inbox.Sent', false, (err, box) => {
if (err) throw err;
let msg, htmlEntity, plainEntity;
msg = mimemessage.factory({
contentType: 'multipart/alternate',
body: []
});
htmlEntity = mimemessage.factory({
contentType: 'text/html;charset=utf-8',
body: mailOptions.html
});
plainEntity = mimemessage.factory({
body: mailOptions.text
});
msg.header('Message-ID', '<1234qwerty>');
msg.header('From', mailOptions.from);
msg.header('To', mailOptions.to);
msg.header('Subject', mailOptions.subject);
msg.header('Date', new Date()));
//msg.body.push(htmlEntity);
msg.body.push(plainEntity);
imap.append(msg.toString());
})
});
imap.once('error', function (err) {
reject(err);
});
imap.once('end', function () {
resolve(response);
});
imap.connect();
}
//console.log('Message sent: %s', info.messageId);
return resolve(info);
});
Зависимость: модуль mimemessage, который используется для генерации сообщения MIME перед сохранением его в поле "Отправленные", поскольку тип сообщения MIME требуется для imap.append()