NodeJS 错误:连接ECONNREFUSED 127.0.0.1:465节点邮件程序

t5zmwmid  于 2022-12-26  发布在  Node.js
关注(0)|答案(7)|浏览(394)

我正在使用我的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
});

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

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

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

6vl6ewon

6vl6ewon1#

谢谢你们的时间,伙计们。下面是对我有效的方法。

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上找到了上面的例子。我怀疑如果你的密码包含@符号,考虑到u和smtps链接,这种情况可能会发生在你身上。因此,建议将它拆分成一个对象,而不使用@符号干扰你的smtps URL。这是我的猜测。尽管如此,上面的解决方案对我来说是有效的。另外,不要“t忘记允许安全性较低的应用程序从您的谷歌控制台。

ssm49v7z

ssm49v7z2#

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

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

希望这能对人有所帮助。

cfh9epnr

cfh9epnr3#

为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分钟处理这个错误,发现host属性未定义(我使用了一个环境变量将其移植到config中)。

lsmepo6l

lsmepo6l4#

我也曾犯过同样的错误,这对我很有效

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

w6mmgewl5#

多亏了这个方法,我才算解决了这个问题。

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}`);
}
6fe3ivhb

6fe3ivhb6#

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

omvjsjqw

omvjsjqw7#

如果没有其他工作,这可能是因为您的服务器提供商没有为您启用端口465.我使用A2主机,他们没有启用端口465默认情况下,与技术支持后,然后只有我可以发送电子邮件通过使用谷歌工作区电子邮件.

相关问题