【问题标题】:Trying to use nodemailer to send emails using gmail and am receiving the error: "Can't create new access token for user"尝试使用 nodemailer 使用 gmail 发送电子邮件并收到错误:“无法为用户创建新的访问令牌”
【发布时间】:2018-01-21 18:01:28
【问题描述】:

我目前有一个使用来自 gmail 的 nodemailer 发送电子邮件的设置。当我手动创建访问令牌(仅持续约 1 小时)时,它可以正常工作。但是,在那一小时过去后,我收到以下错误。请注意,在那一小时内,我可以正常发送电子邮件并且一切正常。

 { 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' }

我用来发送电子邮件的代码是:

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

我尝试过的事情: - 允许不太安全的应用程序(似乎没有任何影响) - 禁用杀毒软件(这原本是一个无关的问题) - 创建一个新的应用程序和一组令牌(这有 0 影响)

任何帮助将不胜感激,谢谢!

【问题讨论】:

    标签: node.js email gmail google-oauth


    【解决方案1】:

    问题是因为访问令牌将在 3600 秒后过期。您必须使用刷新令牌生成一个新令牌。查看这篇可以帮助您解决问题的好文章:https://medium.com/@nickroach_50526/sending-emails-with-node-js-using-smtp-gmail-and-oauth2-316fe9c790a1

    【讨论】:

      【解决方案2】:

      process.env.GMAIL_RFRESHTOKEN - 这应该是GMAIL_REFRESH_TOKEN 吗?查看该库的源代码,该错误似乎会直接从 GMail API 中抛出,因为该库本身从不构造此错误。这将支持刷新令牌未定义/为空的理论。

      【讨论】:

      • 好的,谢谢!看来我没有像我想象的那样复制和粘贴。
      • 我可以使用 zoho 服务access_token 获得邮件帮助吗? @ZoëClarno
      猜你喜欢
      • 2020-12-20
      • 1970-01-01
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      • 2013-04-25
      • 2020-04-30
      • 2016-10-18
      • 2023-03-25
      相关资源
      最近更新 更多