MailKit 提供的代码示例表明访问 IMAP 邮箱需要与此类似的代码...
var at = "<<Access_Token>>";
using (var client = new ImapClient())
{
client.Connect("imap-mail.outlook.com", 993, SecureSocketOptions.SslOnConnect);
client.Authenticate("<<Email_Address>>", at);
// do stuff...
client.Disconnect(true);
}
现在,当将此代码与 GMail 和正确生成且未过期的访问令牌一起使用时,这是一种享受。
同样的代码,再一次,正确生成的访问令牌只会导致AuthenticationException: Invalid username or password.
被抛出client.Authenticate
在线。
现在我已经针对这个网站进行了测试,我知道电子邮件地址和访问令牌值是有效的。我在 Gmail 中做错了什么?
[编辑] 我发现,在这个 MSDN 页面上,建议......
您的应用程序/服务器在 AUTHENTICATE 命令中将访问令牌传递给我们的 IMAP 服务。我们接受一个 base64 编码的字符串,其中包含:
- 用户名。
- 直接 OAuth 2.0 请求的身份验证类型 Bearer。
- MSA 授予的访问令牌。
例如,您的应用程序/服务器将对这个字符串进行 base-64 编码:
user={user@domain.com}^Aauth=Bearer {Access Token}^A^A
其中 {user@domain.com} 是用户帐户,{Access Token} 是 MSA 授予的访问令牌,^A 是 Ctrl-A 字符 (U+0001)。
但是,我尝试使用创建建议的字符串并将其作为“密码”值传递,client.Authenticate()
但无济于事。