2016-07-13 81 views
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

问题是您的系统不接受GMail的SSL证书。您可以覆盖client.ServerCertificateValidationCallback

一个非常简单的解决方案的例子可能是这样的:

client.ServerCertificateValidationCallback =() => true; 

显然,这意味着,如果有人曾经欺骗imap.gmail.com,你的软件会被抓到的MITM攻击,所以这不是理想。

您可能希望将证书的指纹与已知的指纹进行匹配,或者将证书添加到本地证书库并为其分配信任级别。