web-dev-qa-db-ja.com

Node Mailer Error

Firebase Cloud Functionsでnodemailerを使用して、リアルタイムデータベースにデータが追加されたときにメールを送信しています。

コード:

const functions = require('firebase-functions');
const nodemailer = require('nodemailer');

const gmailEmail = '[email protected]';
const gmailPassword = 'mypassword';

const mailTransport = nodemailer.createTransport({
  service: 'gmail',
  auth: {
  user: gmailEmail,
  password: gmailPassword
}
});

const APP_NAME = 'ABC In'

exports.salonCreatedAccount = functions.database.instance('abc-
in').ref('/abc/{def}').onCreate(event => {
const snapshot = event.data;
const val = snapshot.val()
console.log(val);

const email = val.email;
const displayname = val.name;

return sendconfirmationEmail(email, displayname);
});

function sendconfirmationEmail(email, displayName){
const mailOptions = {
  from: `${APP_NAME} <[email protected]>`,
  to: email
};

mailOptions.subject = `Welcome to ${APP_NAME}!`;
mailOptions.text = `Some Text`;
return mailTransport.sendMail(mailOptions).then(() => {
  console.log(`New welcome mail sent to ${email}`);
});
}

実行中に次のエラーが表示されます。注:メールとパスワードが正しいことを確認し、間違いがないことを確認しました。

エラー:

Error: Missing credentials for "PLAIN"
at SMTPConnection._formatError (/user_code/node_modules/nodemailer/lib/smtp-connection/index.js:591:19)
at SMTPConnection.login (/user_code/node_modules/nodemailer/lib/smtp-connection/index.js:340:38)
at connection.connect (/user_code/node_modules/nodemailer/lib/smtp-transport/index.js:270:32)
at SMTPConnection.once (/user_code/node_modules/nodemailer/lib/smtp-connection/index.js:188:17)
at SMTPConnection.g (events.js:292:16)
at emitNone (events.js:86:13)
at SMTPConnection.emit (events.js:185:7)
at SMTPConnection._actionEHLO (/user_code/node_modules/nodemailer/lib/smtp-connection/index.js:1113:14)
at SMTPConnection._processResponse (/user_code/node_modules/nodemailer/lib/smtp-connection/index.js:747:20)
at SMTPConnection._onData (/user_code/node_modules/nodemailer/lib/smtp-connection/index.js:543:14)

どうすれば修正できますか?

8
Sriram R

passwordオブジェクトのpassの名前をauthに変更します。例えば

const mailTransport = nodemailer.createTransport({
  service: 'gmail',
  auth: {
    user: gmailEmail,
    pass: gmailPassword
  }
});

私は同じ問題を抱えていて、そのように解決しました。

このメッセージがログに記録されているnodemailerのコードを調べると、コードは次のようになります。

  if (this._auth.user && this._auth.pass) { // this condition <---
    this._auth.credentials = {
      user: this._auth.user,
      pass: this._auth.pass
    };
  } else {
    return callback(this._formatError('Missing credentials for "' + this._authMethod + '"', 'EAUTH', false, 'API'));
  }

お役に立てれば :)

4
Shahzaib Sheikh

ローカルnodejsテストアプリから同じエラーを解決しました、何によって
@ Zaheen への返信: GmailとNodeJSを使用したNodemailer

var smtpTransport = require('nodemailer-smtp-transport');

var transporter = nodemailer.createTransport(smtpTransport({
  service: 'gmail',
  Host: 'smtp.gmail.com',
  auth: {
    user: '[email protected]',
    pass: 'realpasswordforaboveaccount'
  }
}));

(2FactorAuthを持つBTWアカウントでは、安全性の低いアプリを有効にできません)。
使用したnodemailer-smpt-transportxoauth2 、およびHostauth {}に追加しました。


Firebaseでまだやっていません。次は...うまくいけば.. :)

2
verNsíon1

Nodemailerを使用して、電子メールを送信するアカウントの電子メールとパスワードを提供する必要があります。Firebaseはそれを保存するため、コードに直接記述する必要はありません。そのためには、gmail.emailおよびgmail.password Google Cloud環境変数を設定する必要があります。

コンソールで、パスに関数を保存します/yourProject/functions$このように変数を設定します:

firebase functions:config:set gmail.email="[email protected]" gmail.password="yourPassword"

そして、あなたはそれをこのように使うことができます:

const gmailEmail = functions.config().gmail.email;
const gmailPassword = functions.config().gmail.password;
const mailTransport = nodemailer.createTransport({
service: 'gmail',
 auth: {
  user: gmailEmail,
  pass: gmailPassword
 }
});

これが皆さんにとって役立つことを願っています

1
RamiroIsBack

これまでと同じエラーが発生し、オンラインで解決策を見つけることができませんでした。

この正確なエラー「「プレーン」の資格情報がありません」に対する私の解決策:

  • Firebase Consoleの認証に移動します
  • サインイン方法をクリックします
  • Googleを選択
  • 有効になっていることを確認してください

これで私のエラーは解決しました。 (あなたと同じコード)

0
Anders Ekman

公式ドキュメント によると、GMailは特別な場合に基本認証を無効にすることがあります。

ログインの問題を防ぐには、OAuth2を使用するか、別の配信プロバイダー(できれば専用プロバイダー)を使用する必要があります。

詳細はこちら: https://nodemailer.com/usage/using-gmail/

0