错误:连接ECONNREFUSED 127.0.0.1:465 nodemailer

时间:2016-06-25 02:39:07

标签: node.js email

我正在使用我的Gmail帐户向我的用户电子邮件发送smtp警报消息。示例,注册或帐户被阻止等我正在使用节点邮件程序,并且电子邮件已成功发送,没有一次失败。以下是我的代码。

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帐户,然后用我的新google for business电子邮件替换gmail

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

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

4 个答案:

答案 0 :(得分:9)

谢谢你们的时间。以下是对我有用的。

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网址。这是我的猜想。尽管如此,上述解决方案对我有用。另外,不要忘记从谷歌控制台允许安全性较低的应用程序。

答案 1 :(得分:1)

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

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)
       }

答案 2 :(得分:0)

为使用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');
});

如果遇到此错误,请确保正确设置了host属性。

console.log(transporter.options.host);

我花了20分钟处理此错误,以发现host属性未定义(我正在使用环境变量将其移植到配置中)。

答案 3 :(得分:0)

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

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

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