Trying to use nodemailer to send emails using gmail and am receiving the error: “Can't create new access token for user”

帅比萌擦擦* 提交于 2021-01-05 11:39:29

问题


I currently have a setup to send emails using nodemailer from gmail. It works correctly when I manually create an access token (which only last for ~1 hour). However, after that hour has passed I get the below error. Note, during that hour I am able to send emails just fine and everything works.

 { Error: Can't create new access token for user
at XOAuth2.generateToken (C:\Users\user\My-Projects\***\node_modules\nodemailer\lib\xoauth2\index.js:162:33)
at XOAuth2.getToken (C:\Users\user\My-Projects\***\node_modules\nodemailer\lib\xoauth2\index.js:111:18)
at SMTPConnection._handleXOauth2Token (C:\Users\user\My-Projects\***\node_modules\nodemailer\lib\smtp-connection\index.js:1421:27)
at Immediate.setImmediate (C:\Users\user\My-Projects\***\node_modules\nodemailer\lib\smtp-connection\index.js:1239:45)
at runCallback (timers.js:666:20)
at tryOnImmediate (timers.js:639:5)
at processImmediate [as _immediateCallback] (timers.js:611:5) code: 'EAUTH', command: 'AUTH XOAUTH2' }

The code I am using to send the email is:

var emailMsg = `Name: ${name}\nEmail: ${email}\n\nMessage:\n${msg}`;

var transporter = nodemailer.createTransport({
    service: 'gmail',
    auth: {
        type: 'OAuth2',
        user: process.env.GMAIL_ACC,
        clientId: process.env.GMAIL_CLIENTID,
        clientSecret: process.env.GMAIL_CLIENTSECRET,
        refreshToken: process.env.GMAIL_RFRESHTOKEN,
        accessToken: process.env.GMAIL_ACCESSTOKEN
    }
});

var mailOptions = {
    from: process.env.GMAIL_ACC,
    to: process.env.GMAIL_ACC,
    subject: `Contact Form - ${name}`,
    text: emailMsg
};

transporter.sendMail(mailOptions,
    function(mailErr, mailRes) {
        if(mailErr) {
            //Mail was unable to send
            sendResponse(418, false, [{'email': 'Server was unable to send email.'}]);
            console.log('Mail Error:\n ', mailErr);
        } else {
            //Everything worked correctly. (As far as responses go)
            sendResponse(200, true);
        }
    }
);

Things I have tried: - Allowing less secure apps (Doesn't seem to have any affect) - Disabling AntiVirus (This was originally a problem for something unrelated) - Creating a new app and set of tokens (This has had 0 affect)

Any help would be appreciated, thanks!


回答1:


process.env.GMAIL_RFRESHTOKEN - Should this be GMAIL_REFRESH_TOKEN? Looking through the source code of the library, it would appear this error would be thrown directly from the GMail API, as the library never constructs this error itself. This would support the theory that the refresh token is undefined/null.




回答2:


The problem is because the access token going to expire in 3600 seconds. You have to generate a new one using your refresh token. See this good article which can help you to solve your problem: https://medium.com/@nickroach_50526/sending-emails-with-node-js-using-smtp-gmail-and-oauth2-316fe9c790a1



来源:https://stackoverflow.com/questions/45665349/trying-to-use-nodemailer-to-send-emails-using-gmail-and-am-receiving-the-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!