【发布时间】:2019-12-05 04:18:17
【问题描述】:
对于很多客户,我们连接到 Office 365 Outlook IMAP 服务器,并且效果很好。但是,对于一位客户来说,它现在不起作用。我可以使用用户名和密码登录 portal.office.com,然后转到 Outlook 那里查看邮箱,但我一辈子都无法在我的代码中使用它。这是我的代码:
var stream = new MemoryStream();
var logger = new ProtocolLogger(stream, false);
using (var client = new MailKit.Net.Imap.ImapClient(logger))
{
try
{
client.Connect("outlook.office365.com", 993, true);
client.AuthenticationMechanisms.Remove("XOAUTH2");
client.Authenticate(@"SVC_CubitDLE@lyse.no", @".whb----%RS*,H^");
var inbox = client.Inbox;
inbox.Open(FolderAccess.ReadWrite);
var uids = await inbox.SearchAsync(SearchQuery.NotSeen);
} catch (Exception exc){
exc.Dump();
stream.Position = 0;
var reader = new StreamReader(stream);
reader.ReadToEnd().Dump();
}
}
我尝试了使用和不使用client.AuthenticationMechanisms.Remove("XOAUTH2");。
抛出的异常是AuthenticationException,消息为LOGIN failed.
steam中发出的日志是:
S: * OK The Microsoft Exchange IMAP4 service is ready. [UABSADAAUAAyADYANABDAEEAMAAxADkAOAAuAEYAUgBBAFAAMgA2ADQALgBQAFIATwBEAC4ATwBVAFQATABPAE8ASwAuAEMATwBNAA==]
C: E00000000 CAPABILITY
S: * CAPABILITY IMAP4 IMAP4rev1 AUTH=PLAIN AUTH=XOAUTH2 SASL-IR UIDPLUS ID UNSELECT CHILDREN IDLE NAMESPACE LITERAL+
S: E00000000 OK CAPABILITY completed.
C: E00000001 AUTHENTICATE PLAIN AFNWQ19DdWJpAAAAAAAAAAAAAAAAAAAASF4=
S: E00000001 NO AUTHENTICATE failed.
C: E00000002 LOGIN SVC_CubitDLE@lyse.no ".whb----%RS*,H^"
S: E00000002 NO LOGIN failed.
知道我在这里做错了什么吗?
【问题讨论】:
-
您好像粘贴了两次实际密码。可能想立即改变。
-
(仅供参考,
AUTHENTICATE PLAIN也包含 base64 编码的密码。) -
我现在已经查看了实际问题,我认为这是微软客户服务的问题。 IMAP 部分看起来完美无缺。
-
我错过了base64部分,但上面的其他密码不是正确的。感谢您的 cmets。
-
我参加聚会有点晚了,我假设用户名和密码字符串现在已经被混淆了(?),所以我只能问:用户名或密码是否包含任何Unicode字符?我能想到的唯一可能破坏
AUTHENTICATE PLAIN的是MailKit的SaslPrep实现在某种程度上是错误的,但这将要求用户名或密码包含似乎并非如此的unicode字符。
标签: outlook office365 imap mailkit