2016-09-19 6 views
1

Я пытаюсь использовать MimeKit и MailKit для получения электронной почты из папки «Входящие».
Но вход на почтовый сервер Imap не работает.
Я использую порт 993 с ssl.
Я попытался подключиться/войти/FETCH на порт 143 с помощью Telnet, и он работает.
Я попытался подключить/ВХОД/FETCH на порт 993 с Openssl, и он работает.
Mailkit v.1.4.2.1Ошибка Mailkit Authenticate to 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

Если вы за это, вы могли бы проверить, что это фиксируется путем создания MailKit из источников GitHub и тестирования полученной DLL в вашем приложении? Я хотел бы сделать выпуск nuget в эти выходные, чтобы решить эту проблему, если смогу, но я не хочу сказать, что NTLM исправлена! а потом выяснится, что это не так ... – jstedfast

ответ

1

Существует/было аутентификации bug в AUTHENTICATE NTLM который является первой аутентификацией mec hanism, который MailKit попробовал в вашем случае. К сожалению, есть также ошибка (?) В Exchange в том, что когда NTLM auth не удается, он автоматически, кажется, отрицает AUTHENTICATE PLAIN, что и MailKit возвращается к попытке.

В качестве временного решения отключить NTLM аутентификацию в MailKit, делая это:

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

Смежные вопросы