smtp通过postfix和nodejs nodemailer连接关闭发送邮件

sko*_*rec 1 email postfix-mta smtp node.js nodemailer

我有使用nodejs模块nodemailer通过smtp服务器远程发送的问题

host: 'mail.5cpa.ru'
port: 587
secure: false (true tried also)
Run Code Online (Sandbox Code Playgroud)

smtp服务器是我的,我可以通过thenderbird发送邮件,使用相同的设置

日志

server 220 5cpa.ru ESMTP Postfix (Ubuntu)
client EHLO vonica
server 250-5cpa.ru
250-PIPELINING
250-SIZE 15728640
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
client STARTTLS
server 220 2.0.0 Ready to start TLS
socket Closing connection to the server
Run Code Online (Sandbox Code Playgroud)

谢谢!

小智 7

我有类似的问题(可能相同),我发现当我使用自签名SSL证书时会发生这种情况.我通过在tls中添加"rejectUnauthorized"选项来修复此问题:

var transporter = nodemailer.createTransport(smtpTransport({
    host: host,
    port: 25,
    auth: {
        user: user,
        pass: pass
    },
    tls:{
        rejectUnauthorized: false
    }
}));
Run Code Online (Sandbox Code Playgroud)

该错误应用于"sendMail"函数的回调,而不是作为"错误"发出.


agm*_*984 5

我没有足够的声誉来回复上面,但你也可以检查 Nodemailer 的最新语法,即:

 const smtpConfig = {
     host: 'smtp.gmail.com',
     port: 465,
     secure: true, // use SSL
     auth: {
       user: 'user@gmail.com',
       pass: 'pass'
     }
 }
Run Code Online (Sandbox Code Playgroud)

笔记:

 secure: true // use SSL
Run Code Online (Sandbox Code Playgroud)

如果您告诉它使用 SSL,您可能不需要 TLS 解决方法。

参考: https: //nodemailer.com/2-0-0-beta/setup-smtp/

我的目前正在运行 postfix 和 mailx,我只需要输入主机名:

 const transporter = nodemailer.createTransport({
          name: 'localhost'
 })
Run Code Online (Sandbox Code Playgroud)

只要您可以执行此测试(在 shell 中输入),就应该可以工作:

 echo "Email Body Test" | mail -s "Email Subject Test" you@yourdomain.com
Run Code Online (Sandbox Code Playgroud)

如果它不起作用,请检查您的防火墙、端口 25(可能不是本例中的问题,但在其他类似情况下)。

还要确认运行节点的用户有使用邮件程序的权限。