【问题标题】:Error: connect ECONNREFUSED 127.0.0.1:465 nodemailer错误:连接 ECONNREFUSED 127.0.0.1:465 nodemailer
【发布时间】:2016-10-27 17:23:11
【问题描述】:

我正在使用我的 gmail 帐户向我的用户电子邮件发送 smtp 警报消息。例如,注册或帐户被阻止等。我使用的是 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 ✔</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
});

就在昨天,将 google for business 帐户注册到我的@mydomain 帐户,然后将 gmail 替换为我的新 google for business 电子邮件

var smtpTransport = nodemailer.createTransport("SMTP",{
    service: "Gmail",
    auth: {
        user: "user@mydomain.com",
        pass: "userpass"
    }
});

问题是,它不会使用新帐户发送电子邮件。它宁愿在我的控制台上返回标题错误。我尝试更改新帐户的安全性以允许来自谷歌控制台的安全性较低的应用程序都无济于事。请问这个错误意味着什么?还考虑使用我的电子邮件的用户名和密码,这是最好的选择吗?请问如何最好地实现?任何帮助将不胜感激。

【问题讨论】:

  • 节点邮件程序显然试图连接到 localhost(127.0.0.1),这不太可能是 Google 的邮件服务器。这意味着运输设置有问题。试试这个nodemailer.createTransport('smtps://user%40gmail.com:pass@smtp.gmail.com');
  • @Molda 感谢您抽出宝贵时间。您的解决方案适用于 gmail.com 帐户。当我用@mydomain.com 替换电子邮件时它失败了。我得到上面的错误。我很困惑,考虑到两者都是谷歌帐户,我期待它能够工作。
  • 难道你不会把 smtp.gmail.com 改成 smtp.mydomain.com 吗?
  • Nodemailer: ECONNREFUSED的可能重复
  • @Molda 不,我不是。我用过nodemailer.createTransport('smtps://user%myDomain.com:pass@smtp.gmail.com');。

标签: node.js email


【解决方案1】:

感谢您抽出宝贵的时间。以下是适合我的方法。

nodemailer.createTransport('smtps://user%myDomain.com:pass@smtp.gmail.com');

改为

var smtpConfig = {
    host: 'smtp.gmail.com',
    port: 465,
    secure: true, // use SSL
    auth: {
        user: 'user@myDomain.com',
        pass: 'pass@pass'
    }
};
var transporter = nodemailer.createTransport(smtpConfig);

我在文档 https://github.com/nodemailer/nodemailer 上找到了上面的示例。我怀疑如果您的密码包含@ 符号,考虑到您和 smtps 链接,这可能会发生在您身上。因此,建议将其拆分为一个对象,而 @ 符号不会干扰您的 smtps url。这是我的猜测想法。尽管如此,上述解决方案对我有用。另外,不要忘记允许来自您的 google 控制台的安全性较低的应用程序。

【讨论】:

  • 我已经使用了代码。不过,它对我不起作用。
【解决方案2】:

为使用它的任何人添加 Bluehost 的配置。

let transporter = nodemailer.createTransport({
    host: 'box1109.bluehost.com',
    port: 465,
    secure: true,
    auth: {
        user: 'someusername@somewebsite.com',
        pass: 'yourpassword'
    }
});

您可以使用verify() 方法验证选项。

transporter.verify((err, success) => {
    if (err) console.error(err);
    console.log('Your config is correct');
});

如果您遇到此错误,请确保主机属性设置正确。

console.log(transporter.options.host);

我在这个错误上花了 20 分钟才发现主机属性未定义(我使用环境变量将其移植到配置中)。

【讨论】:

    【解决方案3】:

    我使用的是secure: false,我在生产中遇到了同样的问题,下面是对我有用的解决方案:

    const transporter = nodemailer.createTransport({
      host: <hostname>,
      port: 25,
      secure: false,
      logger: true,
      debug: true,
      ignoreTLS: true // add this 
    });
    

    希望这会对某人有所帮助。

    【讨论】:

      【解决方案4】:

      我遇到了同样的错误,这对我有用

      try {
                  var transporter = nodemailer.createTransport({
                      service: 'gmail',
                      port:465,
                      secure: true, // true for 465, false for other ports
                      logger: true,
                      debug: true,
                      secureConnection: false,
                      auth: {
                          user: 'test@gmail.com', // generated ethereal user
                          pass: '*****', // generated ethereal password
                      },
                      tls:{
                          rejectUnAuthorized:true
                      }
                  })
      
               var info = await transporter.sendMail({
                      from: 'myuser@outlook.com', // sender address
                      to: 'anotheruser@hotmail.co.uk', // list of receivers
                      subject: 'Test Email', // Subject line
                      text: 'Hello world ?' // plain text body
                      html: output, // html body
              });
              }
             catch(error) {
                      console.log(error)
             }
      

      【讨论】:

        【解决方案5】:

        多亏了这种方式,我才发现了这个问题。

        const nodemailer = require("nodemailer");
        
        const sendEmail = async(mailOptions) => {
        
        let transporter = nodemailer.createTransport({
                    service: 'gmail',
                    port:465,
                    secure: true,
                    secureConnection: false,
                    auth: {
                        user: 'your mail address',
                        pass: 'your mail address password', 
                    },
                    tls:{
                        rejectUnAuthorized:true
                    }
        });
        
        let info = await transporter.sendMail(mailOptions);
        console.log(`Message Sent: ${info.messageId}`);
        }
        

        【讨论】:

        • 请对您编写的代码添加解释。
        【解决方案6】:

        在我的情况下,代理是错误的,所以请查看代理告别设置

        【讨论】:

        • 如果您使用的是 Gmail 服务,请添加:'Gmail',
        猜你喜欢
        • 2022-11-03
        • 2020-08-26
        • 2021-02-22
        • 2021-12-06
        • 1970-01-01
        • 2019-03-15
        • 2021-03-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多