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
。
现在我已针对this网站进行了测试,我知道电子邮件地址和访问令牌值有效。我在Gmail中做错了什么?
[编辑] 我在this MSDN page上找到了......
的建议您的应用/服务器将访问令牌传递给我们的IMAP服务 AUTHENTICATE命令。我们接受包含以下内容的base64编码字符串:
- 用户名。
- 直接OAuth 2.0请求的身份验证类型承载。
- MSA授予的访问令牌。
例如,你的 app / server将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()
中的“密码”值传递无效。
答案 0 :(得分:0)
作为OAuth2.0流程的一部分,您需要根据https://technet.microsoft.com/en-ca/dn440163
将范围参数指定为wl.imap,wl.offline_access
可能还需要其他范围,例如wl.email
和wl.basic
,但根据我自己对我所阅读的文档的理解,它们不应该是必要的。