web-dev-qa-db-ja.com

Nodejsnodemailerユーザー名とパスワードは受け入れられません

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 at SMTPConnection._formatError(C:\ Users\Carlos\Desktop\Proyectos\nodeServer\node_modules\nodemailer\lib\smtp-connection\index.js:774:19)at 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)atSMTPConnection。 _processResponse(C:\ Users\Carlos\Desktop\Proyectos\nodeServer\node_modules\nodemailer\lib\smtp-connection\index.js:933:20)at 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)at addCh unk(_stream_読み取り可能.js:283:12)at表すユーザー名とパスワードは受け付けていません。詳細については、\ n535 5.7.8 https://support.google.com/mail/?p=BadCredentials p6sm97493129wrx.50 --gsmtp '、responseCode:535、command:' AUTHPLAIN '}をご覧ください。

「安全性の低いアプリ」に関するGmailアカウントの対応するパラメータを変更しました。 Gmail以外の別のアカウントでも試してみました。私はこれで試しました:

service: 'gmail',

そしてこれは接続のために:

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

ここスタックオーバーフローですべての「同様の質問」を読みましたが、他に何か必要なのか、何か悪いことをしているのかわかりません。 (もちろん、両方のアカウントのユーザー名とパスワードを確認しましたが、問題ありません)。

私は何が悪いのですか?

3
CVO
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: '[email protected]',
    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 <[email protected]>",
        to: "[email protected]",
        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

5
Rohan Shukla

受け入れられた答えは私にはうまくいきませんでした。これらの4つのステップは実行しました:

  • 管理者アカウントを使用して、Google管理コンソールにサインインします。

  • 管理コンソールのダッシュボードから、[セキュリティ]、[基本設定]の順に移動します(下部にある[その他のコントロール]をクリックする必要がある場合があります)。

  • [安全性の低いアプリ]で、[安全性の低いアプリの設定に移動]を選択します。

  • サブウィンドウで、[すべてのユーザーの安全性の低いアプリへのアクセスを有効にする]ラジオボタンを選択します。

2
Victor