nodemailer 失败,连接被拒绝,使用已知良好的 SMTP 服务器
Posted
技术标签:
【中文标题】nodemailer 失败,连接被拒绝,使用已知良好的 SMTP 服务器【英文标题】:nodemailer fails with connection refused, using known good SMTP server 【发布时间】:2019-06-20 10:54:26 【问题描述】:我有一个邮件服务器设置和工作(在 Linode 上 dockerized dovecot/postfix,使用 tvial docker 映像) - 我可以从我的 macbook 上的 roundcube 和邮件客户端发送和接收邮件。
但是使用相同的 SMTP 服务器和凭据设置 nodemailer,我得到:
Error: queryA ECONNREFUSED mail.xxxxx.com
at errnoException (dns.js:50:10)
at QueryReqWrap.onresolve [as oncomplete] (dns.js:238:19)
code: 'EDNS',
errno: 'ECONNREFUSED',
syscall: 'queryA',
hostname: 'mail.xxxxx.com',
command: 'CONN'
我正在使用文档中的示例脚本:
"use strict";
const nodemailer = require("nodemailer");
// async..await is not allowed in global scope, must use a wrapper
async function main()
// Generate test SMTP service account from ethereal.email
// Only needed if you don't have a real mail account for testing
//let account = await nodemailer.createTestAccount();
// create reusable transporter object using the default SMTP transport
let transporter = nodemailer.createTransport(
host: "mail.xxxxx.com",
port: 465,
secure: true, // true for 465, false for other ports
auth:
user: "steve@xxxxx.com",
pass: "pppppp"
);
// setup email data with unicode symbols
let mailOptions =
from: '"Fred Foo ????" <foo@example.com>', // sender address
to: "steve@zzzzz.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
let info = await transporter.sendMail(mailOptions)
console.log("Message sent: %s", info.messageId);
// Preview only available when sending through an Ethereal account
console.log("Preview URL: %s", nodemailer.getTestMessageUrl(info));
// Message sent: <b658f8ca-6296-ccf4-8306-87d57a0b4321@example.com>
// Preview URL: https://ethereal.email/message/WaQKMgKddxQDoou...
main().catch(console.error);
我也收到同样的错误,但没有尝试使用以下方式发送电子邮件:
transporter.verify((err, success) =>
if (err)
console.error(err);
else
console.log('Your config is correct');
);
【问题讨论】:
【参考方案1】:遇到了同样的问题。只需使用 5.0.0 之前的版本即可。
要安装特定版本,请使用npm install package@version
在我们的例子中:npm install nodemailer@4.7.0
【讨论】:
这个答案比投票更有价值!我花了几个小时来解决这个问题。开发人员如何判断最新的 nodemailer 是坏的? (在我的情况下为 6.5.0)。 nodemailer 开发团队感到羞耻。【参考方案2】:我在通过生成 html 文件发送批量邮件时遇到了类似的问题。 这对我来说是因为 Linux 对打开文件的数量有限制,这会阻止打开每封邮件的电子邮件模板。
Linux 上的默认限制是 1024。 检查命令:ulimit -n
将打开文件数限制提高到最多 10000 个: ulimit -n 10000(我已经设置了10000)
提高当前shell中打开文件的数量限制: ulimit -s 10000
如果:您收到权限错误: 您需要在 /etc/limits.conf 或 /etc/security/limits.conf 文件中提高允许的限制(文件所在的位置取决于您的特定 Linux 发行版)。
例如,要允许机器上的任何人将打开文件的数量增加到 10000 个,请将该行添加到 limits.conf 文件中。
* hard nofile 10000
然后注销并重新登录到您的系统,您应该可以这样做:
ulimit -n 10000
没有权限错误。
它解决了我的问题。我在这里找到了解决方案: changing number of open files limit @将
【讨论】:
以上是关于nodemailer 失败,连接被拒绝,使用已知良好的 SMTP 服务器的主要内容,如果未能解决你的问题,请参考以下文章
“连接失败:用户'root'@'localhost'的访问被拒绝(使用密码:YES)”来自php函数[重复]
curl: (7) 连接 127.0.0.1 端口 8000 失败:连接被拒绝
FileZilla尝试连接“ECONNREFUSED - 连接被服务器拒绝”失败。解决方案