Missing credentials for "PLAIN" nodemailer Missing credentials for "PLAIN" nodemailer javascript javascript

Missing credentials for "PLAIN" nodemailer


You have

auth: {    user: 'user@gmail.com',    password: 'password'}

But you should write this

auth: {    user: 'user@gmail.com',    pass: 'password'}

Just rename password to pass.


I was able to solve this problem by using number 3, Set up 3LO authentication, example from the nodemailer documentation (link: https://nodemailer.com/smtp/oauth2/). My code looks like this:

let transporter = nodemailer.createTransport({    host: 'smtp.gmail.com',    port: 465,    secure: true,    auth: {        type: 'OAuth2',        user: 'user@example.com',        clientId: '000000000000-xxx0.apps.googleusercontent.com',        clientSecret: 'XxxxxXXxX0xxxxxxxx0XXxX0',        refreshToken: '1/XXxXxsss-xxxXXXXXxXxx0XXXxxXXx0x00xxx',        accessToken: 'ya29.Xx_XX0xxxxx-xX0X0XxXXxXxXXXxX0x'    }});

If you looked at the example in the link that I stated above, you can see there that there is a 'expires' property but in my code i didn't include it and it still works fine.

To get the clientId, clientSecret, refreshToken, and accessToken, I just watched this video https://www.youtube.com/watch?v=JJ44WA_eV8E .

I don't know if this is still helpful to you tho.


Gmail / Google app email service requires OAuth2 for authentication. PLAIN text password will require disabling security features manually on the google account.

To use OAuth2 in Nodemailer, refer: https://nodemailer.com/smtp/oauth2/

Sample code:

var email_smtp = nodemailer.createTransport({        host: "smtp.gmail.com",  auth: {    type: "OAuth2",    user: "youremail@gmail.com",    clientId: "CLIENT_ID_HERE",    clientSecret: "CLIENT_SECRET_HERE",    refreshToken: "REFRESH_TOKEN_HERE"                                }});

And if you still want to use just plain text password, disable secure login on your google account and use as follows:

var email_smtp = nodemailer.createTransport({        host: "smtp.gmail.com",  auth: {    type: "login", // default    user: "youremail@gmail.com",    pass: "PASSWORD_HERE"  }});