尝试使用MailKit连接到GMail时出错

时间:2016-07-13 15:51:08

标签: oauth-2.0 google-oauth mailkit google-oauth-.net-client

我有以下代码......

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.

的指示上失败

我最初认为这是'因为帐户有2步验证。所以,我设置了另一个帐户,确保它只使用了常规身份验证设置,我得到了同样的错误。

我在这里和其他地方发现了一些处理此异常的帖子,但它们似乎处理了使用SmtpClient()的问题,在这里,正如您从代码中看到的那样,我我收到了ImapClient()的错误。

任何人都可以提出可能导致错误的原因吗?是GMail吗? MailKit? 。净?以上所有?

1 个答案:

答案 0 :(得分:1)

问题是您的系统不接受GMail的SSL证书。

您可以覆盖client.ServerCertificateValidationCallback

一个非常简单的解决方案示例可能如下所示:

client.ServerCertificateValidationCallback = () => true;

显然,这意味着如果有人欺骗了imap.gmail.com,你的软件就会陷入麻省理工学院的攻击,所以这并不理想。

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