2016-09-19 212 views
1

我试图使用MimeKit和MailKit从收件箱中获取电子邮件。
但是,登录到邮件服务器Imap不起作用。
我用ssl使用端口993。
我试图连接/登录/ FETCH端口143与Telnet,它的工作原理。
我试图用Openssl连接993端口上的/ LOGIN/FETCH并且它可以工作。
Mailkit v.1.4.2.1Mailkit验证到Imap失败

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) 
+0

如果你是为它,你可以验证这是通过从GitHub源文件构建MailKit并在应用中测试生成的dll来修复的?如果可以的话,我想在本周末发布nuget以解决此问题,但我不想说“NTLM已修复!”然后它发现它不是... – jstedfast

回答

1

有/是一个bugAUTHENTICATE NTLM认证这是第一个认证mec这是MailKit在您的案例中尝试的。不幸的是,还有在Exchange中的一个错误(?),当NTLM身份验证失败时,它似乎自动拒绝AUTHENTICATE PLAIN这是MailKit回落尝试。

作为一种变通方法,这样做禁用MailKit NTLM认证:

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; 
    } 
} 
+0

你已经离开了几天,但改变了代码,它的工作.... 非常感谢你... – OleFolkersen

+0

我发布了MailKit 1.8.1与NTLM修复。你可以检查一下,看看是否为你修复了NTLM身份验证? – jstedfast