Mailkit对Imap的身份validation失败

我正在尝试使用MimeKit和MailKit从收件箱中获取电子邮件。
但登录到邮件服务器Imap不起作用。
我正在使用端口993和ssl。
我试图在端口143上用Telnet连接/ LOGIN / FETCH,它可以工作。
我试图在端口993上用Openssl连接/ LOGIN / FETCH,它可以工作。
Mailkit v.1.4.2.1

KODE:

using (var client = new ImapClient(new ProtocolLogger("imap.log"))) { try { client.Connect(server, this.port, true); client.AuthenticationMechanisms.Remove("XOAUTH2"); client.Authenticate(user, password); var inbox = client.Inbox; inbox.Open(FolderAccess.ReadWrite); if (inbox.Count > 0) { var range = Enumerable.Range(0, inbox.Count).ToArray(); inbox.AddFlags(range, MessageFlags.Deleted, false); inbox.Expunge(); } client.Disconnect(true); } catch (AuthenticationException e) { throw e; } } 

IMAP.LOG:

  Connected to imaps://xxxx.xxx.xx:993/ S: * OK The Microsoft Exchange IMAP4 service is ready. C: A00000000 CAPABILITY S: * CAPABILITY IMAP4 IMAP4rev1 AUTH=PLAIN AUTH=NTLM AUTH=GSSAPI UIDPLUS MOVE ID CHILDREN IDLE NAMESPACE LITERAL+ S: A00000000 OK CAPABILITY completed. C: A00000001 AUTHENTICATE NTLM S: + C: TlRMTVNTUAABAAAABwIIAAAAAAAgAAAAAAAAACAAAAA= S: + TlRMTVNTUAACAAAABgAGADgAAAAFAokCETTDB74D2YsAAAAAAAAAAKIAogA+AAAABgLwIwAAAA9LAE0ARAACAAYASwBNAEQAAQAUAEsATQBEAEUAWABDADIAMAAwADYABAAaAGkAbgB0AGUAcgBuAC4AawBtAGQALgBkAGsAAwAwAEsATQBEAEUAWABDADIAMAAwADYALgBpAG4AdABlAHIAbgAuAGsAbQBkAC4AZABrAAUAGgBpAG4AdABlAHIAbgAuAGsAbQBkAC4AZABrAAcACAA8TRLTaRLSAQAAAAA= C: TlRMTVNTUAADAAAAGAAYAFYAAAAYABgAbgAAAAAAAABIAAAADgAOAEgAAAAAAAAAVgAAAAAAAACGAAAAAYIIAgoAWikAAAAPaQBvAG0AdABlAHMAdAA6stwc8LXYfAAAAAAAAAAAAAAAAAAAAAC5L0RCGGq9hCGwriyfURwGscjNCDTBeSA= S: A00000001 NO AUTHENTICATE failed. C: A00000002 AUTHENTICATE PLAIN S: + C: XXXXXXXXXX S: A00000002 NO AUTHENTICATE failed. C: A00000003 LOGIN xxxxxxxxx xxxxxxxx S: A00000003 NO Server Unavailable. 15 S: * BYE Connection closed. 14A 

例外:

  AuthenticationException: “Authentication failed.” at MailKit.Net.Imap.ImapClient.Authenticate(Encoding encoding, ICredentials credentials, CancellationToken cancellationToken) at MailKit.MailService.Authenticate(String userName, String password, CancellationToken cancellationToken) 

AUTHENTICATE NTLM身份validation中存在/是一个错误 ,它是MailKit在您的情况下尝试的第一个身份validation机制。 不幸的是,在Exchange中也存在一个错误(?),当NTLM auth失败时,它会自动拒绝AUTHENTICATE PLAIN ,这就是MailKit回归尝试的原因。

解决方法是,通过执行以下操作在MailKit中禁用NTLM身份validation:

 client.AuthenticationMechanisms.Remove ("NTLM"); 

生成的代码应如下所示:

 using (var client = new ImapClient(new ProtocolLogger("imap.log"))) { try { client.Connect(server, this.port, true); client.AuthenticationMechanisms.Remove("XOAUTH2"); client.AuthenticationMechanisms.Remove("NTLM"); client.Authenticate(user, password); var inbox = client.Inbox; inbox.Open(FolderAccess.ReadWrite); if (inbox.Count > 0) { var range = Enumerable.Range(0, inbox.Count).ToArray(); inbox.AddFlags(range, MessageFlags.Deleted, false); inbox.Expunge(); } client.Disconnect(true); } catch (AuthenticationException e) { throw e; } }