Nodejs nodemailer Имя пользователя и пароль не принимаются - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь отправлять письма с помощью nodejs и nodemailer, но у меня это не работает. У меня есть этот код:

const config = require('../../config');
const http = require('http');
const nodemailer = require('nodemailer');

module.exports = {

    sendMail: function (params) {
        return new Promise((resolve, reject) => {

            var transporter = nodemailer.createTransport({
                //service: 'gmail', //I tried with this too
                host: 'smtp.gmail.com',
                port: 465,
                secure: true,
                auth: {
                    user: params.fromMail,
                    pass: params.fromPass
                }
            });

            var mailOptions = {
                from: params.fromMail,
                to: params.toMailList,
                subject: params.subject,
                html: params.mailHtmlContent,
            };

            transporter.sendMail(mailOptions, function(err, info){
                if (err) {
                    reject(err);
                } else {
                    resolve(info.response);
                }
            });


        });
    }

};

Я получаю эту ошибку:

{Ошибка: неверный логин: 535-5.7.8 Имя пользователя и пароль не принимаются. Узнайте больше на 535 5.7.8 https://support.google.com/mail/?p=BadCredentials p6sm97493129wrx.50 - gsmtp в SMTPConnection._formatError (C: \ Users \ Carlos \ Desktop \ Proyectos \ nodeServer \ node_modules \ nodemailer \ lib \ smtp-connection \ index.js: 774: 19) в SMTPConnection._actionAUTHComplete (C: \ Users \ Carlos \ Desktop \ Proyectos \ nodeServer \ node_modules \ nodemailer \ lib \ smtp-connection \ index.js: 1509: 34) в SMTPConnection._responseActions.push.str (C: \ Users \ Carlos \ Desktop \ Proyectos \ nodeServer \ node_modules \ nodemailer \ lib \ smtp-connection \ index.js: 547: 26) в SMTPConnection._processResponse (C: \ Users \ Carlos \ Desktop \ Proyectos \ nodeServer \ node_modules \ nodemailer \ lib \ smtp-connection \ index.js: 933: 20) в SMTPConnection._onData (C: \ Users \ Carlos \ Desktop \ Proyectos \ nodeServer \ node_modules \ nodemailer \ lib \ smtp-connection \ index.js: 739: 14) в TLSSocket._socket.on.chunk (C: \ Users \ Carlos \ Desktop \ Proyectos \ nodeServer \ node_modules \ nodemailer \ lib \ smtp-connection \ index.js: 691: 47) на TLSSocket.emit (events.js: 182: 13) в addChunk (_stream_readable.js: 283: 12) at readableAddChunk (_stream_readable.js: 264: 11) в TLSSocket.Readable.push (_stream_readable.js: 219: 10) код: «EAUTH», ответ: «535-5.7.8 Имя пользователя и пароль не принимаются. Узнайте больше на \ n535 5.7.8 https://support.google.com/mail/?p=BadCredentials p6sm97493129wrx.50 - gsmtp ', responseCode: 535, команда:' AUTH PLAIN '}

Я изменил соответствующий параметр в моей учетной записи Gmail для «менее безопасных приложений». Я пытался с другой учетной записью не Gmail тоже. Я пробовал с этим:

service: 'gmail',

и это для связи:

host: 'smtp.gmail.com',
port: 465,
secure: true,

Я читаю все «Подобные вопросы» здесь в stackoverflow и не знаю, нужно ли мне что-нибудь еще или я делаю что-то плохое (конечно, я восстановил имя пользователя и пароль в обеих учетных записях, и они в порядке).

Что я делаю плохо?

Ответы [ 2 ]

0 голосов
/ 29 мая 2019

Принятый ответ не работает для меня. Эти четыре шага сделали:

  • Войдите в консоль администратора Google, используя учетную запись администратора.

  • На панели управления консоли администратора перейдите в раздел «Безопасность» и затем «Основные настройки» (возможно, вам придется нажать «Другие элементы управления» внизу).

  • В разделе Менее защищенные приложения выберите Перейти к настройкам для менее защищенных приложений.

  • В подокне выберите переключатель Включить доступ к менее защищенным приложениям для всех пользователей.

0 голосов
/ 17 января 2019
var nodemailer = require('nodemailer');

const transporter = nodemailer.createTransport({
  service: 'gmail',//smtp.gmail.com  //in place of service use host...
  secure: false,//true
  port: 25,//465
  auth: {
    user: 'example@gmail.com',
    pass: 'password'
  }, tls: {
    rejectUnauthorized: false
  }
});

transporter.sendEMail = function (mailRequest) {
  return new Promise(function (resolve, reject) {
    transporter.sendMail(mailRequest, (error, info) => {
      if (error) {
        reject(error);
      } else {
        resolve("The message was sent!");
      }
    });
  });
}

module.exports = transporter;

Использование

//import transporter JS file
const mail = require('../utils/mail');
let htmlContent = `
                <h1><strong>Contact Form</strong></h1>
                <p>Hi,</p>
                <p>${name} contacted with the following Details</p>
                <br/>
                <p>Email: ${email}</p>
                <p>Phone: ${phone}</p>
                <p>Company Name: ${companyName}</p>
                <p>Message: ${message}</p>
                `
    let mailOptions = {
        from: "Example <example@gmail.com>",
        to: "me@gmail.com",
        subject: "Mail Test",
        text: "",
        html: htmlContent
    }

mail.sendMail(mailOptions)
    .then(function (email) {
        res.status(200).json({ success: true, msg: 'Mail sent' });
    }).catch(function (exception) {
        res.status(200).json({ success: false, msg: exception });
    });

Примечание:

  1. Перед отправкой электронной почты с помощью Gmail необходимо разрешить незащищенным приложениям доступ к Gmail. Это можно сделать, перейдя в настройки Gmail. https://myaccount.google.com/lesssecureapps?pli=1

  2. Также включите капчу https://accounts.google.com/DisplayUnlockCaptcha

...