【问题标题】:can't enable imap via access token无法通过访问令牌启用 imap
【发布时间】:2020-04-07 16:20:15
【问题描述】:

我正在尝试通过登录访问令牌访问 gmail imap。 我将令牌传递给后端,但它显示 username and password are not accepted 前端使用 react:

const {name,email,message,accessToken} = this.state;
    const form = await Axios.post("/api/form",{
      name,
      email,
      message,
      accessToken
    });

使用 nodejs 的后端:

var imap = new Imap({
        user: 'SMTH@gmail.com',
        host: 'imap.gmail.com',
        xoauth2 :request.body.accessToken,
        port: 993,
        tls: true,
    });

【问题讨论】:

    标签: node.js reactjs authentication gmail imap


    【解决方案1】:

    在不知道您具体使用的是哪个 IMAP 库的情况下,请记住以下几点:

    • 您必须明确请求 mail.google.com 范围才能访问用户的电子邮件
    • 大多数基于 JS 的 IMAP 客户端(除了少数类似 emailjs-imap-client 的客户端)不会为您自动编码 XOAUTH 令牌,您需要手动执行此操作,对于 gmail,这是:@987654322 @。要在 javascript 中获取 ^A 令牌,您可以使用 \u0001,如下所示:
    const xoauth2 = `user=${email}\u0001auth=Bearer ${accessToken}\u0001\u0001`
    

    请记住,在将其发送到服务器之前,您还需要对其进行 base64 编码:

    btoa(xoauth2)
    

    您也可以自己通过 IMAP 检查您的凭据是否正确。要从安装了 openSSL 的 bash 客户端使用以下命令进行连接:

    openssl s_client -connect imap.gmail.com:993 -crlf
    

    这将打开一个 IMAP 会话,然后您可以在其中发送命令。 通过 XOAUTH2 登录的示例(使用上面编码的 base64 形式):

    ? AUTHENTICATE XOAUTH2 dXNlcj1zb21ldGhpbmdAZ21haWwuY29tAWF1dGg9QmVhcmVyIHNvbWVfYWNjZXNzX3Rva2VuAQE=
    

    如果您的凭据正确,服务器将回复 OK 和一条消息。

    【讨论】:

      猜你喜欢
      • 2012-02-26
      • 2018-06-12
      • 1970-01-01
      • 1970-01-01
      • 2013-01-18
      • 2017-10-28
      • 2020-08-18
      • 2013-10-23
      • 1970-01-01
      相关资源
      最近更新 更多