当尝试使用Nodemailer(https://github.com/nodemailer/nodemailer)在Node中发送电子邮件时,与Ethereal测试电子邮件帐户结合使用时,对Nodemailer传输器sendMail
的调用引发错误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
- nodemailer版本:
4.6.4
- 操作系统:
OSX version 10.12.6
7条答案
按热度按时间laik7k3q1#
在我的例子中,我需要在
transporter
对象上将secure
键设置为true
,然后它就工作了。o8x7eapl2#
在我的情况下,当我把端口586改为587时,它就工作了。
wmomyfyw3#
检查您的互联网连接,可能是关闭的。下面是一个Etheral Email和typescript的示例
2jcobegt4#
在我的例子中,
/etc/postfix/main.cf
中的smtpd_recipient_restrictions
导致了这个问题。变更为:
现在成功了
4ktjp1zp5#
我使用SendGrid作为电子邮件服务提供商,默认情况下,SendGrid对出站电子邮件使用机会性TLS加密。这可以防止网络犯罪分子在传输过程中阅读电子邮件的内容,即所谓的中间人攻击。您可以在sendgird官方博客https://sendgrid.com/blog/what-is-email-encryption/#:~:text= By%20default%2C%20SendGrid%20uses%20opportunistic,server%20accepts%20an%20inbound%20TLSv1中了解更多信息。
将.env文件中的secure从“false”更改为“true”,因为您需要安全地发送电子邮件。
并从环境变量中获取secure的值,如下所示:
7xzttuei6#
vmjh9lq97#