Nodemailer с сервисом Gmail не работает на heroku

У меня есть базовая настройка электронной почты для отправки электронной почты с помощью Nodemailer с AngularJS и NodeJS, и у меня есть проект, развернутый на heroku.

Электронная почта, кажется, работает нормально, когда я запускаю приложение на heroku, но когда я развертываю его на Heroku, электронные письма не отправляются.

Для аутентификации я использую адрес Gmail, и у меня также есть bcc для другого адреса Gmail. Таким образом, адреса from и bcc - это два разных адреса Gmail. Адрес from совпадает с адресом, используемым для аутентификации.

Может ли кто-нибудь помочь мне решить эту проблему?

Изменить: добавление кода

var nodemailer = require('nodemailer');
var transporter = nodemailer.createTransport({
    service: 'Gmail',
    auth: {
        user: '[email protected]',
        pass: 'foobar'
    }
});

router.post('/send',function(req,res){

    var mailOptions = {
        from: 'Foo Bar ✔ <[email protected]>',
        to: req.body.email,
        subject: "Hello " + req.body.email,
        text: 'Hello ' + req.body.email + '✔',
        html: "<p>Hello " + req.body.email + " </p>",
        bcc: "[email protected]"
    };
    transporter.sendMail(mailOptions, function(error, info){
        if(error){
            console.log(error);
        }else{
            console.log('Message sent: ' + info.response);
            res.send(200);
        }
    });        
});

person skip    schedule 05.09.2014    source источник
comment
Пожалуйста, включите сообщение об ошибке.   -  person Peter Lyons    schedule 06.09.2014
comment
@PeterLyons: Ошибка: неверный логин, responseCode: 534, code: 'EAUTH'.   -  person skip    schedule 06.09.2014
comment
Ну есть теории? Мне кажется, что учетные данные явно неправильные.   -  person Peter Lyons    schedule 06.09.2014
comment
@PeterLyons: Жду ответа от вас, так как я смог заставить приложение работать при локальном тестировании. Мне просто интересно, проблема с капчей, которую gmail может просить меня использовать при использовании моих учетных данных gmail через heroku. Так может быть отключение этого может сделать Gmail счастливым?   -  person skip    schedule 06.09.2014
comment
@PeterLyons: Ага, похоже, мне нужно было зайти сюда accounts.google.com/DisplayUnlockCaptcha и выключить Эта мера безопасности отключена от моей учетной записи gmail, чтобы позволить машине, на которой я развернул приложение через heroku, иметь возможность отправлять электронные письма через мою учетную запись gmail с помощью nodemailer. Хорошие вещи от Gmail.   -  person skip    schedule 06.09.2014
comment
Прохладный. См. предупреждение nodemailer о попытке отправить массовую почту с помощью служб, явно не предназначенных для этого. Рассмотрите возможность перехода на реальный сервис, предназначенный для транзакционной электронной почты из таких приложений, как mailgun, postmarkapp, sendgrid, amazon SES и т. Д.   -  person Peter Lyons    schedule 06.09.2014


Ответы (4)


Я считаю, что это проблема с безопасностью учетной записи Google.

  • Google заблокировал ваш вход для использования функций рассылки из-за неизвестного устройства (местоположения).

Несколько шагов, чтобы убедиться в этом:

  • Запустите свой сервер локально и отправьте электронное письмо.

  • Проверьте оповещения своей учетной записи на предмет неизвестного входа.

Эту проблему можно временно решить с помощью: https://accounts.google.com/DisplayUnlockCaptcha.

Более постоянным решением было бы изменить пароль на более надежный уровень:

прописная буква + строчная буква + специальные символы + цифры

person Alex Yan    schedule 20.07.2017

Вместо использования прямых учетных данных Gmail, подобных этому

auth: {
    user: '[email protected]',
    pass: 'foobar'
}

Используйте OAuth2

 auth: {
    type: 'OAuth2',
    user: '[email protected]',
    accessToken: 'ya29.Xx_XX0xxxxx-xX0X0XxXXxXxXXXxX0x'
}

Google блокирует IP-адреса heroku (небезопасно), если мы используем прямые учетные данные, как вы упомянули выше. Вы можете сослаться на эту статью о Medium здесь

person Ebin Xavier    schedule 30.07.2019
comment
Игровая площадка Google немного изменилась, но в статье по-прежнему есть все, что вам нужно, чтобы начать работу. Спасибо - person David George Smith; 26.01.2021

Спустя 5 лет я все еще боролся с этой проблемой (в моем случае все ответы, найденные на SO, не удались). Вот что я сделал, пока все работает плавно:

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

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

  • Настройте NodeMailer так:

      const nodemailer = require('nodemailer'),
          sgTransport = require('nodemailer-sendgrid-transport');
    
      const mailTransporter = nodemailer.createTransport(sgTransport({
          auth: {
              api_key: process.env.ADMIN_EMAIL_API_KEY // your api key here, better hide it in env vars
          }
      }))
    
  • Чтобы отправить электронное письмо сейчас, вы должны добавить свой Gmail в поле «Ответить», например:

      mailTransporter.sendMail({
          from: `"Admin" <[email protected]>`,
          to: '[email protected]',
          replyTo: '[email protected]',
          subject: 'Something',
          html: `Boom !`
      });
    

Думаю, это все, на случай, если что-то забыл, пожалуйста, оставьте комментарий ниже

person Damiano    schedule 10.10.2019
comment
это сделало это для меня. похоже, что героку иногда блокируется в Gmail. Справка . heroku.com/CFG547YP/ - person Luc; 23.11.2020

Попробуйте обновить пакет nodemailer (используя команду "npm update nodemailer")

var transporter = nodemailer.createTransport({
    host: 'smtp.gmail.com',
    port: 465,
    secure: true,
    auth: {
        user: '[email protected]', // Your email id
        pass: 'pwd123' // Your password
    },
    tls: {
        // do not fail on invalid certs
        rejectUnauthorized: false
    }
});
router.post('/send',function(req,res){

    var mailOptions = {
        from: 'Foo Bar ✔ <[email protected]>',
        to: req.body.email,
        subject: "Hello " + req.body.email,
        text: 'Hello ' + req.body.email + '✔',
        html: "<p>Hello " + req.body.email + " </p>",
        bcc: "[email protected]"
    };
    transporter.sendMail(mailOptions, function(error, info){
        if(error){
            console.log(error);
        }else{
            console.log('Message sent: ' + info.response);
            res.send(200);
        }
    });        
});
person Nuwan Sameera    schedule 21.06.2017