2016-09-19 5 views
1

MimeKit 및 MailKit을 사용하여받은 편지함에서 전자 메일을 가져 오려고합니다.
그러나 메일 서버 Imap에 대한 로그온이 작동하지 않습니다.
포트 993을 SSL로 사용하고 있습니다.
포트 143에서/LOGIN/FETCH를 텔넷으로 연결하려고 시도했지만 작동합니다.
포트 993에서/LOGIN/FETCH를 Openssl과 연결하려고 시도했지만 작동합니다.
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

당신이 그것을위한 경우, 당신은이 있는지 확인 수 :

client.AuthenticationMechanisms.Remove ("NTLM"); 

결과 코드는 다음과 같이한다 GitHub 소스에서 MailKit을 빌드하고 결과 dll을 테스트하여 해결됩니다. 할 수만 있다면이 문제를 해결하기 위해 이번 주말에 누 겟을 발표하고 싶습니다. 그러나 "NTLM은 수정되었습니다!"라고 말하고 싶지 않습니다. 그리고 나서 그것은 그렇지 않다는 것을 알게되었습니다 ... – jstedfast

답변

1

/선수 bugAUTHENTICATE NTLM 인증 첫 번째 인증 메크 인 MailKit이 귀하의 케이스에서 시도한 허니즘. 불행히도 NTLM 인증에 실패하면 자동으로 MailKit이 시도하는 것 인 AUTHENTICATE PLAIN을 거부하는 것으로 보이는 Exchange의 버그 (?)가 있습니다. 해결 방법으로

,이 작업을 수행하여 MailKit에서 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