Missing credentials for “PLAIN” nodemailer

后端 未结 6 1688
清歌不尽
清歌不尽 2020-12-03 10:47

I\'m trying to use nodemailer in my contact form to receive feedback and send them directly to an email. This is the form below.

6条回答
  •  無奈伤痛
    2020-12-03 11:28

    We don't need to lower our Google Account Security for this. This works for me on localhost and live server. Versions: node 12.18.4, nodemailer ^6.4.11.

    STEP 1: Follow setting up your Google Api Access in this video AND IGNORE his code (it didn't work for me): https://www.youtube.com/watch?v=JJ44WA_eV8E

    STEP 2: Try this code in your main app file after you install nodemailer and dotenv via npm i nodemailer dotenv:

        require('dotenv').config();  //import and config dotenv to use .env file for secrets
        const nodemailer = require('nodemailer');
    
        function sendMessage() {
          try {
            // mail options
            const mailOptions = {
              from: "MySite@mysite.com",
              to: "my_gmail@gmail.com",
              subject: "Hey there!",
              text: "Whoa! It freakin works now."
            };
            // here we actually send it
            transporter.sendMail(mailOptions, function(err, info) {
              if (err) {
                console.log("Error sending message: " + err);
              } else {
                // no errors, it worked
                console.log("Message sent succesfully.");
              }
            });
          } catch (error) {
            console.log("Other error sending message: " + error);
          }
        }
    
        // thats the key part, without all these it didn't work for me
        let transporter = nodemailer.createTransport({
          host: 'smtp.gmail.com',
          port: 465,
          secure: true,
          service: 'gmail',
          auth: {
                type: "OAUTH2",
                user: process.env.GMAIL_USERNAME,  //set these in your .env file
                clientId: process.env.OAUTH_CLIENT_ID,
                clientSecret: process.env.OAUTH_CLIENT_SECRET,
                refreshToken: process.env.OAUTH_REFRESH_TOKEN,
                accessToken: process.env.OAUTH_ACCESS_TOKEN,
                expires: 3599
          }
        });
    
        // invoke sending function
        sendMessage();
    

    Your .env file for the above code should look similar to this:

    GMAIL_USERNAME=your_mail@gmail.com
    GMAIL_PASSWORD=lakjrfnk;wrh2poir2039r
    OAUTH_CLIENT_ID=vfo9u2o435uk2jjfvlfdkpg284u3.apps.googleusercontent.com
    OAUTH_CLIENT_SECRET=og029503irgier0oifwori
    OAUTH_REFRESH_TOKEN=2093402i3jflj;geijgp039485puihsg[-9a[3;wjenjk,ucv[3485p0o485uyr;ifasjsdo283wefwf345w]fw2984329oshfsh
    OAUTH_ACCESS_TOKEN=owiejfw84u92873598yiuhvsldiis9er0235983isudhfdosudv3k798qlk3j4094too283982fs
    

提交回复
热议问题