尝试发送邮件时远程证书无效

Posted

技术标签:

【中文标题】尝试发送邮件时远程证书无效【英文标题】:The remote certificate is invalid when trying to send mail 【发布时间】:2022-01-24 04:09:32 【问题描述】:

我正在尝试向用户发送密码重置链接,但在 Smtp.send 阶段,我收到错误消息,提示 根据验证程序,远程证书无效

我没有使用 Gmail 发送此邮件,我使用的是我们自己的域邮件服务器。这件事会不会有问题?

这是代码示例。

var smtp = new SmtpClient 
  Host = "mail.sample.com",
    Port = 587,
    EnableSsl = true,
    DeliveryMethod = SmtpDeliveryMethod.Network,
    UseDefaultCredentials = false,
    Credentials = new NetworkCredential(fromEmail.Address, fromEmailPassword)

;
using(var message = new MailMessage(fromEmail, toEmail) 
  Subject = subject,
    Body = body,
    IsBodyhtml = true
)

smtp.Send(message);

【问题讨论】:

证书有效吗?客户端机器上的日期和时间是否正确? @Llama 日期和时间是正确的,我已经用谷歌搜索了这个问题,有些线程需要手动将证书添加到项目中。但找不到合适的指南来做到这一点。不确定我也遇到了同样的问题 【参考方案1】:

我通过添加这些代码来解决它

这行添加在using(var message = new MailMessage(fromEmail, toEmail) 之前

 ServicePointManager.ServerCertificateValidationCallback =new RemoteCertificateValidationCallback(ValidateServerCertificate);

还有这个方法

public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) 
  if (sslPolicyErrors == SslPolicyErrors.None)
    return true;
  else 
    return true;

  

这解决了我的问题。主链接"The remote certificate is invalid according to the validation procedure." using Gmail SMTP server

【讨论】:

请注意,这意味着您的整个应用程序不再验证它遇到的任何 SSL 证书的真实性。因此,如果您正在使用api.some.bank 并且有人设法拦截了您的应用程序的连接,他们可以替换一个虚假的 SSL 证书,而您的应用程序永远不会知道。您应该修改ValidateServerCertificate 以专门验证您的邮件服务器的证书,如果它不是默认的标准验证。或者,更全面的解决方案是在服务器上使用有效的证书。 @Llama 我不知道那部分。那么你能解释一下如何使用有效的证书到服务器吗?

以上是关于尝试发送邮件时远程证书无效的主要内容,如果未能解决你的问题,请参考以下文章

远程证书当没有任何变化时无效的随机破坏电子邮件? (AWS)

使用“1”参数调用“发送”的异常:“根据验证过程,远程证书无效。PowerShell

通过电子邮件发送的 Zip 在第一次尝试时无效

“SMTP 连接()失败”。将其配置为从远程主机发送电子邮件时

联系表格发送时电子邮件无效

我收到错误“ 错误:无效登录:535-5.7.8 用户名和密码不被接受。”当我尝试使用 Node JS 中的模块 nodemailer 发送邮件时