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

Error trying to Connect to GMail with 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 吗?邮件工具包? 。网?以上都是?

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

您可以覆盖 client.ServerCertificateValidationCallback

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

client.ServerCertificateValidationCallback = () => true;

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

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