如何使用 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,
})
我正在使用这样的 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,
})