0

我有以下代码...

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()and 的问题,正如您从代码中看到的那样,我收到了ImapClient().

任何人都可以建议可能导致错误的原因是什么?是GMail吗?邮件套件?。网?上述所有的?

4

1 回答 1

1

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

您可以覆盖client.ServerCertificateValidationCallback.

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

client.ServerCertificateValidationCallback = () => true;

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

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

于 2016-07-14T13:52:28.740 回答