0

Я получил следующий код ...Ошибка пытается подключиться к GMail с MailKit

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); 
} 

При запуске, код не будет работать на указанный как с AuthenticationException: The remote certificate is invalid according to the validation procedure.

Первоначально я думал, что это был 'потому что учетная запись имела двухэтапную аутентификацию. Таким образом, я создал еще одну учетную запись, которая обеспечила бы ее использование только обычных настроек проверки подлинности, и я получил ту же ошибку.

Я нашел несколько сообщений, здесь и в других местах, которые касаются этого исключения, но они, похоже, имеют дело с проблемой работы с SmtpClient() и здесь, как вы можете видеть из кода, я получаю ошибка с ImapClient().

Может кто-нибудь предположить, что это может быть причиной ошибки? Это GMail? MailKit? .СЕТЬ? Все вышеперечисленное?

ответ

0

Проблема в том, что ваша система не принимает SSL-сертификат GMail.

Вы можете переопределить client.ServerCertificateValidationCallback.

Очень простой пример решения может выглядеть следующим образом:

client.ServerCertificateValidationCallback =() => true; 

Очевидно, что означает, что если кто-нибудь подделать imap.gmail.com, ваше программное обеспечение поймают в атаке MITM, так что это не идеально.

Возможно, вам захочется сопоставить отпечаток сертификата с известным отпечатком пальца или добавить сертификат в локальное хранилище сертификатов и присвоить ему уровень доверия.

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