节点 imap 发送电子邮件但不将其保存到已发送
Node-imap sending emails but not saving it to Sent
最近一直在使用 node-imap 并尝试实现发送电子邮件。这是 feathers/node 上的代码:
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);
});
});
}
此代码 运行 正常,可以正常发送电子邮件,但在它完成工作后,我无法在 'Sent' 框中找到那些电子邮件...任何使用过 node-imap 的人,什么我想念吗?干杯。
编辑::刚刚意识到它确实为某些电子邮件提供商(Gmail、Hotmail)保存了它,但对于其他一些则没有。所以我想我没有遗漏任何东西......但是我怎么能为其他不自动保存的供应商手动保存它。
好吧,问题似乎出在电子邮件提供商上,因为此代码对 Gmail 或 Hotmail 工作正常...所以我所做的是在电子邮件已发送给该特定电子邮件提供商后手动将电子邮件附加到 'Sent' 框。 .. 继承人代码如果 any1 需要:
// 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 module 用于在将其存储到 'Sent' 框之前生成 MIME 消息,因为 imap.append()
需要 MIME 消息类型
最近一直在使用 node-imap 并尝试实现发送电子邮件。这是 feathers/node 上的代码:
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);
});
});
}
此代码 运行 正常,可以正常发送电子邮件,但在它完成工作后,我无法在 'Sent' 框中找到那些电子邮件...任何使用过 node-imap 的人,什么我想念吗?干杯。
编辑::刚刚意识到它确实为某些电子邮件提供商(Gmail、Hotmail)保存了它,但对于其他一些则没有。所以我想我没有遗漏任何东西......但是我怎么能为其他不自动保存的供应商手动保存它。
好吧,问题似乎出在电子邮件提供商上,因为此代码对 Gmail 或 Hotmail 工作正常...所以我所做的是在电子邮件已发送给该特定电子邮件提供商后手动将电子邮件附加到 'Sent' 框。 .. 继承人代码如果 any1 需要:
// 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 module 用于在将其存储到 'Sent' 框之前生成 MIME 消息,因为 imap.append()
需要 MIME 消息类型