以下功能适用于控制台应用程序,但它在我的asp.net网站中无效。我收到一个错误: 根据验证程序,远程证书无效。
public static void SendEmail(MailMessage mm)
{
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
smtp.Port = 587;
smtp.EnableSsl = true;
smtp.Credentials = new NetworkCredential("ma@mail.com", "Pass");
smtp.Send(mm);
}
答案 0 :(得分:4)
您可以尝试处理证书验证事件,以便更容易确定远程证书被视为无效的原因。为此,在调用SendEmail方法之前添加以下行:
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);
然后提供ValidateServerCertificate的实现,如
public bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
// replace with proper validation
if (sslPolicyErrors == SslPolicyErrors.None)
return true;
else
return false;
}
ValidateServerCertificate接收的参数应该为您提供有关验证失败原因的详细信息(请检查sslPolicyErrors)。您还可以访问远程证书和证书颁发机构链。
一种可能的情况是,您使用与控制台应用程序不同的用户运行网站,并且此用户不信任gmail证书的颁发者(或链中的中间机构)。如果您以某种方式从Windows证书存储区中的本地计算机/受信任的根证书中删除了证书,则可能会发生这种情况。