尝试发送邮件时远程证书无效
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
“SMTP 连接()失败”。将其配置为从远程主机发送电子邮件时
我收到错误“ 错误:无效登录:535-5.7.8 用户名和密码不被接受。”当我尝试使用 Node JS 中的模块 nodemailer 发送邮件时