2016-09-19 214 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