我有以下代码......
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? 。净?以上所有?
答案 0 :(得分:1)
问题是您的系统不接受GMail的SSL证书。
您可以覆盖client.ServerCertificateValidationCallback
。
一个非常简单的解决方案示例可能如下所示:
client.ServerCertificateValidationCallback = () => true;
显然,这意味着如果有人欺骗了imap.gmail.com,你的软件就会陷入麻省理工学院的攻击,所以这并不理想。
您可能希望将证书的指纹与已知指纹匹配,或者将证书添加到本地证书存储区并为其分配信任级别。