c# – 通过带有自签名SSL证书的邮件服务器从.net应用程序发送电子邮件

我安装了hmailserver 5.3.2并对其进行了配置.它接收和发送

电子邮件通常,但我想用它来发送.net / C#的电子邮件

位于另一台服务器的应用程序,我想使用它

SSL通信.之前,应用程序已配置为发送

通过gmail发送电子邮件,在端口587上运行正常,但现在我们想要使用

我们自己的邮件服务器我们首先将应用程序配置为连接

smtp.domain.com在端口25上运行,它会发送电子邮件.

然后我们
创建了一个自签名证书来测试我们是否可以发送
通过安全通道发送消息.我用.创建了证书
openSSL设置通用名称为:mail.domain.com,smtp.domain.com,
* .domain.com,domain.com.我在防火墙上打开了端口587
配置hmailserver以使用证书进行入站连接
那个港口.
我创建的证书都没有工作(我试过一个然后
创建另一个,依此类推),在.中生成以下(通用)异常
应用:

System.Exception: _COMPlusExceptionCode = -532459699

当然我也尝试通过telnet连接:telnet smtp.domain.com
587,我只是一个空白的屏幕.从那以后它不是防火墙问题
当我在端口587上禁用ssl时,我可以正常连接.
查看日志甚至没有显示使用时连接的尝试
587使用SSL.

我已经检查了这些问题:Getting SmtpClient to work with a self signed SSL certificateUsing a self-signed certificate with .NET’s HttpWebRequest/Response,但它没有解决我的问题. ServerCertificateValidationCallback的方法没有任何影响.

我尝试使用端口25(也在上面的一个问题中提出),465,587,并且所有3个都是相同的:初始握手(SYN / SYN-ACK / ACK)和大约80秒后连接是关闭(FIN),两者之间没什么.

我是否必须在某处安装该证书,以便.net应用程序将其视为可信任的?我的意思是,我已经将它安装为受信任的根证书颁发机构,可以通过运行mmc进行检查,所以我不知道现在要去哪里…

谢谢您的帮助!

PS:不确定这是否属于ServerFault,因为它涉及C#应用程序而且还涉及邮件服务器……

编辑:代码示例:

ServicePointManager.ServerCertificateValidationCallback = 
(sender, certificate, chain, sslPolicyErrors) => true;

SmtpClient mailClient = new SmtpClient("smtp.domain.com");
mailClient.Credentials = new NetworkCredential("username@domain.com", "pwd");
mailClient.Port = 587;
mailClient.EnableSsl = true;
MailMessage mailMessage = new MailMessage("mailAddressFrom", "mailAddressTo", "subject", "body");
mailMessage.IsBodyHtml = true;
mailClient.Send(mailMessage);

编辑2:记录(基于Ramunas的建议):

"TCPIP" 3588    "2010-06-23 10:02:49.685"   "TCPConnection - Posting AcceptEx on 0.0.0.0:465"
"DEBUG" 3588    "2010-06-23 10:02:49.809"   "Creating session 24039"
"TCPIP" 772 "2010-06-23 10:04:29.639"   "TCPConnection - SSL handshake with client failed. Error code: 2, Message: End of file, Remote IP: X"
"DEBUG" 772 "2010-06-23 10:04:29.639"   "Ending session 24039"

最佳答案 目前,无论hMailServer使用的证书是购买还是自签名,您都无法使用c#4 / .NET 4将邮件发送到hMailServer.

问题是两部分AFAIK … c#4 / .NET 4只能使用TLS和端口587发送; hMailServer目前不支持STARTTLS. c#4 / .NET 4不支持465 / SSL的替代方案.

在hMailServer的论坛上看到这个主题“configuring SSL confusion …”.

“SmtpClient.EnableSsl Property “
“备用连接方法是在发送任何协议命令之前预先建立SSL会话.此连接方法有时称为SMTP / SSL,SMTP over SSL或SMTPS,默认情况下使用端口465.此备用连接方法使用SSL目前不支持.“ – MSDN

点赞