2016-07-13 13 views
0

Ich habe den folgenden Code bekam ...Fehler beim Versuch, mit MailKit zu GMail verbinden

var credential = GoogleWebAuthorizationBroker.AuthorizeAsync(new ClientSecrets 
{ 
    ClientId = "<< MY CLIENT ID>>", 
    ClientSecret = "<<MY CLIENT SECRET>>" 
}, 
       new[] { "https://www.googleapis.com/auth/gmail.readonly" }, 
       "<<EMAIL ADDRESS>>", 
       CancellationToken.None, 
       new FileDataStore("Mail2.Auth.Store")).Result; 

using (var client = new ImapClient()) 
{ 
    // THE CODE FAILS ON THIS NEXT LINE 
    client.Connect("imap.gmail.com", 993, SecureSocketOptions.SslOnConnect); 
    client.Authenticate("<<EMAIL ADDRESS>>", credential.Token.AccessToken); 
} 

Sobald er ausgeführt wird, schlägt der Code auf dem angegebenen wie mit AuthenticationException: The remote certificate is invalid according to the validation procedure.

Ich dachte zunächst, dass ist kompliziert weil das Konto über eine zweistufige Authentifizierung verfügt. Also habe ich ein anderes Konto eingerichtet, um sicherzustellen, dass es nur die regulären Authentifizierungseinstellungen verwendet und ich habe den gleichen Fehler bekommen.

Ich habe eine Reihe von Posts gefunden, hier und anderswo, die sich mit dieser Ausnahme befassen, aber sie scheinen sich mit dem Problem der Arbeit mit der SmtpClient() und hier, wie Sie aus dem Code sehen, ich bekomme die Fehler mit der ImapClient().

Kann jemand vorschlagen, was die Ursache des Fehlers sein kann? Ist es GMail? MailKit? .NETZ? Alles das oben Genannte?

Antwort

0

Das Problem ist, dass Ihr System das SSL-Zertifikat von GMail nicht akzeptiert.

Sie können client.ServerCertificateValidationCallback überschreiben.

Ein sehr einfaches Beispiel für eine Lösung könnte so aussehen:

client.ServerCertificateValidationCallback =() => true; 

Offensichtlich das bedeutet, dass, wenn jemand jemals spoofed imap.gmail.com, würde Ihre Software in einem MITM Angriff erwischt werden, so dass nicht ist Ideal.

Wahrscheinlich möchten Sie den Fingerabdruck des Zertifikats mit einem bekannten Fingerabdruck abgleichen oder das Zertifikat zu Ihrem lokalen Zertifikatspeicher hinzufügen und ihm eine Vertrauensstufe zuweisen.