javascript - Nodemailer:从未收到问候
问题描述
当尝试使用 Nodemailer ( https://github.com/nodemailer/nodemailer )在 Node 中发送电子邮件时,与 Ethereal 测试电子邮件帐户结合使用时sendMail
,对 Nodemailer 传输器的调用会引发错误。Greeting never received
我尝试过使用“回调方法”和“异步/等待”方法,但在这两种情况下都会引发相同的错误。这两个示例都非常直接来自 Nodemailer 文档中的工作示例。也许我错过了一些简单的东西?:)
这是产生错误的“回调方法”代码:
it('can send email with a dynamic test account', done => {
nodemailer.createTestAccount((err, account) => {
const transporter = nodemailer.createTransport({
host: 'smtp.ethereal.email',
port: 587,
auth: {
user: account.user, // generated ethereal user
pass: account.pass // generated ethereal password
}
});
const mailOptions = {
from: '"Fred Foo " <foo@example.com>', // sender address
to: 'bar@example.com, baz@example.com', // list of receivers
subject: 'Hello ✔', // Subject line
text: 'Hello world?', // plain text body
html: '<b>Hello world?</b>' // html body
};
// send mail with defined transport object
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return console.log(error);
}
console.log('Message sent: %s', info.messageId);
console.log('Preview URL: %s', nodemailer.getTestMessageUrl(info));
// Message sent: <b658f8ca-6296-ccf4-8306-87d57a0b4321@example.com>
// Preview URL: https://ethereal.email/message/WaQKMgKddxQDoou...
done();
});
});
}).timeout(10000);
这是错误的堆栈跟踪:
{ Error: Greeting never received
at SMTPConnection._formatError (/Users/<username>/projects/personal/learning-tests/javascript/nodemailer/node_modules/nodemailer/lib/smtp-connection/index.js:606:19)
at SMTPConnection._onError (/Users/<username>/projects/personal/learning-tests/javascript/nodemailer/node_modules/nodemailer/lib/smtp-connection/index.js:579:20)
at Timeout._greetingTimeout.setTimeout (/Users/<username>/projects/personal/learning-tests/javascript/nodemailer/node_modules/nodemailer/lib/smtp-connection/index.js:520:22)
at ontimeout (timers.js:498:11)
at tryOnTimeout (timers.js:323:5)
at Timer.listOnTimeout (timers.js:290:5) code: 'ETIMEDOUT', command: 'CONN' }
还有一些附加信息:
- 节点版本:
8.11.2
- 节点邮件版本:
4.6.4
- 操作系统:
OSX version 10.12.6
解决方案
在我的情况下,我需要将secure
密钥设置true
为transporter
对象,然后它才能工作。
let transporter = nodemailer.createTransport({
host: "mail.hostname.com",
port: 465,
secure: true, // true for 465, false for other ports
auth: {
user: 'user@hostname.com', // generated ethereal user
pass: 'password', // generated ethereal password
}
});
推荐阅读
- linux - 无法在 CentOS 7 上安装 Docker 17
- flutter - 在颤动中卸载资产
- java - 可以将侦听器添加到没有引用名称的对象吗?
- android - 在android上向Mapbox Map添加多个标记,无法将源添加到mapboxMap
- oracle - ORA-01017 在 APEX ORDS 安装期间
- macos - Catalina 下的快速操作权限
- python - 我的模板已损坏,无法获取静态文件
- python - 如何使用 python 对使用 android 应用录制的音频执行应用内音频处理?
- python - 如何检查哪个线程首先返回结果
- ignite - 集群范围的未定义行为 [threadName=data-streamer-stripe