Что означает ошибка ESOCKET, когда я пытаюсь отправить электронное письмо? - PullRequest
2 голосов
/ 15 мая 2019

Я пытаюсь отправить электронное письмо, используя 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"}. Что это значит?

Заранее спасибо

1 Ответ

1 голос
/ 15 июля 2019

За https://github.com/nodemailer/nodemailer/issues/889#issuecomment-488267379 (и его последующие действия):

та же проблема здесь.разрешить его, используя IP-адрес в качестве хоста, см. https://nodemailer.com/smtp/#general-options

. Нам кажется, что это связано с регулированием, поскольку около 140 сообщений проходят в пакете, в то время как остальные получают эту ошибку (и всеотправляется на тот же адрес электронной почты, так что нет проблем: плохие адреса электронной почты).Изменение IP-адреса не решило проблему (возможно, потому что SMTP на AWS?).

Что в итоге у нас сработало, так это - https://stackoverflow.com/a/55187729/235704

Нижеизменение кода решило проблему.Добавил это в createTransport ()

tls: {rejectUnauthorized: false}

Код: -

// 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
    },
});

Похоже, что в случае наших провайдеров их сертификаты не покрывают все IP-адреса, которые ониобслуживаются с AWS.

...