Nodemailer: ECONNREFUSED

Я не знаю, что мне не хватает, я использую пример Nodemailer:

var nodemailer = require("nodemailer");

// create reusable transport method (opens pool of SMTP connections)
var smtpTransport = nodemailer.createTransport("SMTP",{
    service: "Gmail",
    auth: {
        user: "[email protected]",
        pass: "userpass"
    }
});

// setup e-mail data with unicode symbols
var mailOptions = {
    from: "Fred Foo ✔ <[email protected]>", // sender address
    to: "[email protected], [email protected]", // 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
});

Я просто сменил пользователя и передал аутентификацию в свою учетную запись Gmail (также пробовал с их значениями), и я изменил адрес электронной почты «на» на свой адрес электронной почты. Я получил:

{ [Error: connect ECONNREFUSED]
  code: 'ECONNREFUSED',
  errno: 'ECONNREFUSED',
  syscall: 'connect' }

Что мне не хватает? Я не вижу ничего в документации, где говорится, что мне нужно сделать что-то большее, чем это, так почему это не сработает? Заранее спасибо.


person user1756980    schedule 01.02.2013    source источник
comment
Вы уже отправляли электронные письма с этого аккаунта? Если у вас есть, имейте в виду, что GMail SMTP имеет ограничения - вы можете отправить только пару сотен электронных писем с учетной записи в определенный день.   -  person S M    schedule 02.02.2013
comment
Нет, я создал учетную запись только для того, чтобы проверить, работает ли это. Я только что отправил мне свое первое электронное письмо оттуда и получил его. Затем я снова попробовал свою программу, все еще говоря, что соединение отклонено.   -  person user1756980    schedule 02.02.2013
comment
Я хотел бы прокомментировать, что пытался использовать sudo. Вы использовали nodemailer? @Себастьян   -  person user1756980    schedule 02.02.2013
comment
Я не использовал его в течение долгого времени, а когда я это сделал, все мои проблемы были вызваны тем, что я достиг лимита отправки электронной почты Gmail. Вы пробовали не использовать ярлык Gmail, а вводить полный SMTP-адрес и все остальное (как описано здесь: github.com/andris9/Nodemailer/blob/master/)?   -  person S M    schedule 02.02.2013
comment
Да, я пробовал это, и я просто пробовал снова, он дает те же самые результаты. Вероятно, это глупый вопрос, но nodemailer говорит, что он совместим с Windows, это не означает только Windows, не так ли? Я использую Ubuntu. @Себастьян   -  person user1756980    schedule 02.02.2013
comment
Нет, этого не будет. Извините, это все, что приходит мне в голову, без дополнительной информации об ошибках.   -  person S M    schedule 02.02.2013
comment
Возможно, это проблема: groups.google.com/d/msg/nodejs / ObVfzUoH-TQ / gSm63mPTmdQJ Для чего стоит, я использовал github.com/eleith/emailjs с Gmail без проблем.   -  person Hector Correa    schedule 02.02.2013
comment
ECONNREFUSED означает, что это какая-то проблема с подключением или брандмауэром. Можете ли вы подключиться к порту 465 smtp.gmail.com с любым другим приложением с того же компьютера, например с openssl: openssl s_client -connect smtp.gmail.com:465   -  person Andris    schedule 02.02.2013
comment
Спасибо, проблема в брандмауэре. Я перенёс проект на другую машину, и он сработал.   -  person user1756980    schedule 04.02.2013


Ответы (8)


Это была проблема с брандмауэром. Оказалось, что с кодом все в порядке, я просто не понял, что подразумевается под сообщением об ошибке.

person user1756980    schedule 04.02.2013
comment
Не могли бы вы объяснить подробнее? - person Mitch; 24.01.2020
comment
Для тех, кто использует secure: false check, перейдите по этой ссылке: stackoverflow.com/questions/38024428/ - person itsHarshad; 11.06.2020

Следующий шаг:

  1. Войдите в учетную запись Gmail.

  2. Включить pop3 на вкладках настроек

  3. Включите менее безопасные приложения на странице: Включите менее безопасные приложения для учетной записи Gmail

  4. Отображение Captcha разблокировки экрана по адресу: Отображение Captcha разблокировки

  5. Определенный вариант электронной почты и отправка

    var mailOptions = {
        host: 'smtp.gmail.com',
        port: 465,
        secure: true, // use SSL
        auth: {
            user: '[email protected]',
            pass: 'password'
        }
    }    
    
    mailer = nodemailer.createTransport(mailOptions);
    
    mailer.sendMail({
    ....
    }, function(err, response) {
            if (err) {
                 console.log(err);
            }
            console.log(response);
    });
    

Надеюсь, этот блок-код поможет вам.

person IT Vlogs    schedule 23.05.2017

Я также использовал учетную запись gmail для отправки электронной почты, вам может потребоваться пароль для конкретного приложения от Google, чтобы позволить nodemailer работать должным образом.

https://support.google.com/mail/answer/1173270?hl=en

person brendecimus    schedule 24.07.2014
comment
Это должен быть комментарий - person pratim_b; 24.07.2014

ECONNREFUSED указывает, что это какая-то проблема с подключением или брандмауэром.

Можете ли вы подключиться к порту 465 smtp.gmail.com с любым другим приложением с того же компьютера, например с openssl?

openssl s_client -connect smtp.gmail.com:465
person Community    schedule 06.07.2014
comment
У меня такая же проблема. Я смог использовать Gmail с того же компьютера, тогда почему брандмауэр блокирует nodemailer? Кроме того, я не устанавливал двухэтапную проверку в Gmail, поэтому я считаю, что пароль приложения не требуется. - person Balwant Kumar Singh; 07.01.2015

если вы используете новую версию nodemailer

nodemailer.createTransport({
    host,
    port,
    secure:,
    auth:{
        user,
        pass
    }
})

подробнее см. https://github.com/andris9/nodemailer-wellknown

person boneyao    schedule 09.08.2014

В моем случае мне просто нужно было отключить мой антивирус Avast.

В белый список на avast сделайте следующее:

Эти действия могут отличаться в зависимости от вашей версии Avast, включая используемый здесь IP-адрес

1) Откройте Avast, перейдите в: Меню -> Настройки. (Он находится в правом верхнем углу)

2) Перейдите на вкладку «Общие» -> «Исключения» -> «Добавить исключение».

введите описание изображения здесь

3) Получите IP вашего Gmail, я думаю, он будет с ошибкой. введите описание изображения здесь

4) Теперь вставьте IP-адрес вашего исключения  введите описание изображения здесь

Надеюсь, это поможет.

person Alex    schedule 21.06.2019

Фактическое решение проблемы заключается в том, что вам необходимо разместить СЕРВИС. Лучше использовать ПЕРЕМЕННЫЕ ОКРУЖАЮЩЕЙ СРЕДЫ

            var transporter = nodemailer.createTransport({
                service: process.env.EMAIL_SERVICE,
                auth: {
                    user:process.env.EMAIL_USER,
                    pass:process.env.EMAIL_PASSWORD
                }
            })
person Alex Hunter    schedule 08.10.2019

проблема с брандмауэром

чтобы заблокировать брандмауэр для отправки электронной почты, вам необходимо разрешить порт или отключить все порты.

разрешение конкретного порта:

$ sudo ufw allow 587

отключить брандмауэр

$ sudo ufw disable

$ sudo ufw reset
person Ericgit    schedule 18.11.2020