当我尝试发送电子邮件时出现 ESOCKET 错误是什么意思?

What does ESOCKET error mean when I'm trying to send an email?

我正在尝试使用 nodemailer 发送电子邮件。

在我的局域网中有一个 SMTP 服务器在端口 25 上侦听。如果我使用 telnet,它工作正常。

我的js脚本是:

this.transporter.sendMail(mailOptions, function (error, info) {
        if (error) {
            console.log(JSON.stringify(error));
            return callback(error, null);
        }

        console.log(JSON.stringify(info));

        return callback(null, true);
});

它只打印:{"code":"ESOCKET","command":"CONN"}。这是什么意思?

提前致谢

https://github.com/nodemailer/nodemailer/issues/889#issuecomment-488267379(并且是 follow-ups):

same problem here. resolved it by using IP address as host, see https://nodemailer.com/smtp/#general-options

对我们来说,这似乎与节流有关,因为大约有 140 封邮件批量处理,而其余邮件收到此错误(并且所有邮件都被发送到同一个电子邮件地址,所以没有问题回复:错误的电子邮件地址) .更改为 IP 并没有解决问题(可能是因为 SMTP 在 AWS 上?)。

最终对我们有用的是这个 -

The below code change fixed the issue. Added this to the createTransport()

tls: {rejectUnauthorized: false}

Code:-

// create reusable transporter object using the default SMTP transport
let transporter = nodemailer.createTransport({
    host: 'host',
    port: 25,
    secure : false, // true for 465, false for other ports
    auth: {
        user: 'user',
        pass: 'password'
    },
    tls: {
        // do not fail on invalid certs
        rejectUnauthorized: false
    },
});

在我们的提供商案例中,他们的证书似乎并未涵盖他们在 AWS 上提供服务的所有 IP。