如何使用 node.js imapflow 连接到 Gmail?

How to connect to Gmail using node.js imapflow?

我正在使用这样的 imapflow 包:

import config from './config.js';
import { ImapFlow } from 'imapflow';

const client = new ImapFlow({
    host: 'imap.gmail.com',
    port: 993,
    secure: true,
    auth: {
        user: 'muhemail@gmail.com',
        pass: '123'
    }
});

await client.connect();

console.log('OK');

它抛出 Invalid credentials (Failure)。我已经四重检查了登录名和密码是否正确,IMAP 在 GMail 设置中已启用。虽然没有启用不太安全的应用程序,但我更愿意保持这种状态。当我尝试在 Thunderbird 中使用相同的凭据时,它会打开一个 OAuth 登录 window,我想我应该以某种方式将其与 imapflow 合并?或者有不同的解决方案吗?

Gmail 不允许使用普通用户名和密码访问其 IMAP 服务。 您应该首先通过 Gmail api 示例 (here) 获取 OAuth2.0 凭据,然后将其转换为 xoauth2.

let {installed: {client_id, client_secret}} = require('./client_secret') // the client_secret.json file
let xoauth2gen = xoauth2.createXOAuth2Generator({
  user: '*******', // the email address
  clientId: client_id,
  clientSecret: client_secret,
  refreshToken: refresh_token
 })

xoauth2gen.getToken(function(err, xoauth2token) {
  if (err) {
    return console.log(err)
  }
        
  let imap = new Imap({
     xoauth2: xoauth2token,
     host: 'imap.gmail.com',
     port: 993,
     tls: true,
     authTimeout: 10000,
     debug: console.log,
 })