2016-09-19 1 views
1

J'essaie d'utiliser MimeKit et MailKit pour récupérer des e-mails à partir de la boîte de réception.
Mais la connexion au serveur de messagerie Imap ne fonctionne pas.
J'utilise le port 993 avec ssl.
J'ai essayé de connecter/LOGIN/FETCH sur le port 143 avec Telnet et cela fonctionne.
J'ai essayé de connecter/LOGIN/FETCH sur le port 993 avec Openssl et cela fonctionne.
Mailkit v.1.4.2.1Mailkit Authentifier à Imap échoue

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 

Exception:

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

Si vous êtes pour elle, pourriez-vous vérifier que cette est fixé en construisant MailKit à partir de sources GitHub et en testant la DLL résultante dans votre application? Je voudrais faire une libération de Nuget ce week-end pour résoudre ce problème si je peux, mais je ne veux pas dire "NTLM est réparé!" et puis il s'est avéré que ce n'est pas ... – jstedfast

Répondre

1

Il est/était un bug dans AUTHENTICATE NTLM authentification qui est le premier mec d'authentification Hanism que MailKit a essayé dans votre cas. Malheureusement, il ya aussi un bug (?) Dans Exchange en ce que lorsque NTLM auth échoue, il semble automatiquement nier AUTHENTICATE PLAIN ce qui est ce que MailKit retombe à essayer.

Pour contourner ce problème, désactivez NTLM authentification dans MailKit en faisant ceci:

client.AuthenticationMechanisms.Remove ("NTLM"); 

Le code résultant devrait ressembler à ceci:

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

Salut ont été absent pendant quelques jours, mais a changé le code et cela fonctionne .... Merci beaucoup ... – OleFolkersen

+0

J'ai publié MailKit 1.8.1 avec le Correctif NTLM. Pourriez-vous vérifier si cela corrige l'authentification NTLM pour vous? – jstedfast