1
使用C#如何連接到支持STARTTLS的SMTP服務器並獲取其SSL證書?我知道這可以使用openssl這樣的事情來完成使用C#獲取SMTP服務器證書
openssl s_client -starttls smtp -crlf -connect 192.168.0.1:25
我不想調用openssl並解析它的輸出。非常感謝如何用C#做到這一點的一個例子。
使用C#如何連接到支持STARTTLS的SMTP服務器並獲取其SSL證書?我知道這可以使用openssl這樣的事情來完成使用C#獲取SMTP服務器證書
openssl s_client -starttls smtp -crlf -connect 192.168.0.1:25
我不想調用openssl並解析它的輸出。非常感謝如何用C#做到這一點的一個例子。
一種方法是綁定到ServerCertificateValidationCallback
回調併發送測試消息到服務器。郵件可能失敗,但證書仍然有效。
private void Form1_Load(System.Object sender, System.EventArgs e)
{
System.Net.ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(RemoteServerCertificateValidationCallback);
using (System.Net.Mail.SmtpClient S = new System.Net.Mail.SmtpClient("smtp.gmail.com"))
{
S.EnableSsl = true;
using (System.Net.Mail.MailMessage M = new System.Net.Mail.MailMessage("[email protected]", "[email protected]", "Test", "Test"))
{
try
{
S.Send(M);
}
catch (Exception)
{
return;
}
}
}
}
private bool RemoteServerCertificateValidationCallback(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)
{
Console.WriteLine(certificate);
return true;
}
謝謝克里斯。這看起來非常有用。 – mozza 2011-02-24 20:51:08
我應該指出'RemoteServerCertificateValidationCallback'實際上是用來執行證書的自定義驗證。我只是在這裏返回true,因爲我不在乎證書是否真的有效。 – 2011-02-24 20:57:47
是的,理解。 – mozza 2011-02-24 21:02:14