typescript TS -类型'TransportOptions'中不存在NodeMailer OAuth2 '身份验证'

gudnpqoy  于 2022-11-26  发布在  TypeScript
关注(0)|答案(3)|浏览(116)

我有一个问题。我需要用Gmail API创建电子邮件发送函数。在文档中,它告诉我要创建一个createTransport函数,如下所示:

const transport = nodemailer.createTransport({
      service: "gmail",
      auth: {
        type: "OAuth2",
        user: "horvatlucian1@gmail.com",
        clientId: CLIENT_ID,
        clientSecret: CLIENT_SECRET,
        refreshToken: REFRESH_TOKEN,
        accessToken: accessToken,
      },
    })

DOCS
但它全部变红并返回:Error
有什么办法吗?谢谢。

qvk1mo1f

qvk1mo1f1#

当您特灵传递accessToken时,存在类型脚本问题,因为在google oauth2client中,getAccessToken()的返回类型是https://github.com/googleapis/google-auth-library-nodejs/blob/b0ddb7512fb9ed1e51b6874b7376d7e1f26be644/src/auth/oauth2client.ts#L331
不受应为字符串的节点邮件程序类型支持:https://github.com/DefinitelyTyped/DefinitelyTyped/blob/7827d853a1d623dd5345d9a11ced3e15eb5d3d8b/types/nodemailer/lib/xoauth2.d.ts#L24
通过查看getAccessToken的返回类型,您可以看到令牌位于类型为string的内部,因此要修复该问题,只需从accessToken中解构令牌即可。

const transport = nodemailer.createTransport({
  service: "gmail",
  auth: {
    type: "OAuth2",
    user: "horvatlucian1@gmail.com",
    clientId: CLIENT_ID,
    clientSecret: CLIENT_SECRET,
    refreshToken: REFRESH_TOKEN,
    accessToken: accessToken.token,
  },
})
euoag5mw

euoag5mw3#

nodemailer.createTransport中需要的accessToken可以为空
因此,为了避免错误,您必须执行以下操作

const transport = nodemailer.createTransport({
            service: 'gmail',
            auth: {
                type: 'OAuth2',
                user: process.env.EMAIL_ADDRESS,
                clientId: process.env.CLIENT_ID,
                clientSecret: process.env.CLIENT_SECRET,
                refreshToken: process.env.REFRESH_TOKEN,
                accessToken: accessToken.token || '',
            },
        })

相关问题