14

我不知道我错过了什么,我使用 Nodemailer 示例:

var nodemailer = require("nodemailer");

// create reusable transport method (opens pool of SMTP connections)
var smtpTransport = nodemailer.createTransport("SMTP",{
    service: "Gmail",
    auth: {
        user: "gmail.user@gmail.com",
        pass: "userpass"
    }
});

// setup e-mail data with unicode symbols
var mailOptions = {
    from: "Fred Foo ✔ <foo@blurdybloop.com>", // sender address
    to: "bar@blurdybloop.com, baz@blurdybloop.com", // list of receivers
    subject: "Hello ✔", // Subject line
    text: "Hello world ✔", // plaintext body
    html: "<b>Hello world ✔&lt;/b>" // html body
}

// send mail with defined transport object
smtpTransport.sendMail(mailOptions, function(error, response){
    if(error){
        console.log(error);
    }else{
        console.log("Message sent: " + response.message);
    }

    // if you don't want to use this transport object anymore, uncomment following line
    //smtpTransport.close(); // shut down the connection pool, no more messages
});

我刚刚更改了用户并将身份验证传递给我的 gmail 帐户信息(也尝试了他们的值),并将“收件人”电子邮件地址更改为我的电子邮件地址。我得到:

{ [Error: connect ECONNREFUSED]
  code: 'ECONNREFUSED',
  errno: 'ECONNREFUSED',
  syscall: 'connect' }

我错过了什么?我在文档中没有看到任何内容表明我需要做更多的事情,那么为什么它不起作用呢?先感谢您。

4

8 回答 8

8

这是一个防火墙问题。结果证明代码没有问题,我只是不明白错误消息的含义。

于 2013-02-04T15:52:06.550 回答
4

以下步骤:

  1. 登录 gmail 帐户。

  2. 在设置选项卡中启用 pop3

  3. 在以下位置启用不太安全的应用:为 gmail 帐户启用不太安全的应用

  4. 显示解锁验证码在:显示解锁验证码

  5. 定义的电子邮件选项和发送

    var mailOptions = {
        host: 'smtp.gmail.com',
        port: 465,
        secure: true, // use SSL
        auth: {
            user: 'gmail_account@gmail.com',
            pass: 'password'
        }
    }    
    
    mailer = nodemailer.createTransport(mailOptions);
    
    mailer.sendMail({
    ....
    }, function(err, response) {
            if (err) {
                 console.log(err);
            }
            console.log(response);
    });
    

希望此块代码对您有所帮助。

于 2017-05-23T11:12:36.957 回答
3

我还使用 gmail 帐户发送电子邮件,您可能需要谷歌提供的应用程序特定密码才能让 nodemailer 正常工作。

https://support.google.com/mail/answer/1173270?hl=en

于 2014-07-24T12:27:21.207 回答
2

ECONNREFUSED 表明这是某种连接或防火墙问题。

您能否使用同一台机器上的任何其他应用程序(例如使用 openssl)连接到 smtp.gmail.com 端口 465?

openssl s_client -connect smtp.gmail.com:465
于 2014-07-06T03:19:17.753 回答
1

如果您使用新的 nodemailer 版本

nodemailer.createTransport({
    host,
    port,
    secure:,
    auth:{
        user,
        pass
    }
})

更多见https://github.com/andris9/nodemailer-wellknown

于 2014-08-09T15:02:15.580 回答
1

就我而言,我只需要禁用我的防病毒软件 Avast。

要在 avast 上加入白名单,请执行以下操作:

这些步骤可能会因您的 Avast 版本而异,包括此处使用的 IP

1) 打开 Avast,转到:菜单 -> 设置。(它位于右上角)

2) 转到常规选项卡 -> 例外 -> 添加例外

在此处输入图像描述

3) 获取您的 gmail 的 IP,我认为它会出现错误。 在此处输入图像描述

4)现在将IP粘贴到您的异常上 在此处输入图像描述

希望能帮助到你。

于 2019-06-21T15:27:51.223 回答
1

实际的问题修复是您需要放置SERVICE。如果您使用环境变量会更好

            var transporter = nodemailer.createTransport({
                service: process.env.EMAIL_SERVICE,
                auth: {
                    user:process.env.EMAIL_USER,
                    pass:process.env.EMAIL_PASSWORD
                }
            })
于 2019-10-08T20:43:18.297 回答
0

防火墙问题

要阻止防火墙以发送电子邮件,您需要允许端口或禁用所有端口。

允许特定端口:

$ sudo ufw allow 587

禁用防火墙

$ sudo ufw disable

$ sudo ufw reset
于 2020-11-18T06:57:24.127 回答