web-dev-qa-db-fra.com

Node Erreur de messagerie

J'utilise nodemailer dans mes fonctions cloud Firebase pour envoyer un courrier lorsqu'une donnée est ajoutée à la base de données en temps réel.

Code:

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}`);
});
}

J'obtiens l'erreur suivante lors de l'exécution. REMARQUE: je me suis assuré que l'e-mail et le mot de passe sont corrects et il n'y a pas d'erreur.

Erreur:

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)

Comment puis-je réparer ça?

8
Sriram R

Renommez password en pass dans auth objet. par exemple

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

J'ai eu le même problème et je l'ai résolu comme ça.

découvert en plongeant dans le code de nodemailer où ce message est enregistré, le code ressemble à ceci.

  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'));
  }

J'espère que cela t'aides :)

4
Shahzaib Sheikh

Résolution de la même erreur à partir d'une application de test nodejs locale, par quoi
@ Zaheen a répondu à: Nodemailer avec Gmail et NodeJS , une partie de sa réponse est copiée ici:

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

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

(Les comptes BTW avec 2FactorAuth ne peuvent pas activer des applications moins sécurisées ).
J'ai utilisé nodemailer-smpt-transport , xoauth2 et ajouté Hôte à auth {} .


Je ne l'ai pas encore fait avec Firebase, c'est la prochaine ... j'espère .. :)

2
verNsíon1

En utilisant nodemailer, vous devez fournir un e-mail et un mot de passe du compte à partir duquel vous envoyez l'e-mail, Firebase les stocke pour vous afin que vous n'ayez pas à les écrire directement sur votre code. Pour cela, vous devez configurer le gmail.email et gmail.password Variables d'environnement Google Cloud.

Dans votre console, dans le chemin où vous stockez vos fonctions /yourProject/functions$ définissez vos variables de cette façon:

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

puis vous pouvez l'utiliser de cette façon:

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

J'espère que cela vous sera utile à tous, c'est ce qui a causé la "simple erreur de justificatif d'identité" dans mon cas

1
RamiroIsBack

J'ai eu cette même erreur et je n'ai trouvé aucune solution en ligne jusqu'à présent.

Ma solution pour cette erreur exacte "Informations d'identification manquantes pour" PLAIN "":

  • Accédez à Authentification dans la console Firebase
  • Cliquez sur la méthode de connexion
  • Sélectionnez Google
  • Assurez-vous qu'il est activé

Cela a résolu mon erreur. (Même code que vous)

0
Anders Ekman

Selon les documents officiels , GMail peut désactiver l'authentification de base dans certains cas spéciaux.

Pour éviter d'avoir des problèmes de connexion, vous devez utiliser OAuth2 ou utiliser un autre fournisseur de livraison et de préférence un fournisseur dédié.

En savoir plus ici: https://nodemailer.com/usage/using-gmail/

0
Daniel Diekmeier