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)
どうすれば修正できますか?
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'));
}
お役に立てれば :)
ローカル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-transport、xoauth2 、およびHostをauth {}に追加しました。
Firebaseでまだやっていません。次は...うまくいけば.. :)
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
}
});
これが皆さんにとって役立つことを願っています
これまでと同じエラーが発生し、オンラインで解決策を見つけることができませんでした。
この正確なエラー「「プレーン」の資格情報がありません」に対する私の解決策:
これで私のエラーは解決しました。 (あなたと同じコード)
公式ドキュメント によると、GMailは特別な場合に基本認証を無効にすることがあります。
ログインの問題を防ぐには、OAuth2を使用するか、別の配信プロバイダー(できれば専用プロバイダー)を使用する必要があります。