4

我安装了 hmailserver 5.3.2 并进行了配置。它正常接收和发送电子邮件,但我想用它从位于另一台服务器的 .net/C# 应用程序发送电子邮件,为此我想使用 SSL 通信。之前,该应用程序被配置为通过 gmail 在端口 587 上发送电子邮件,它工作正常,但现在我们想使用我们自己的邮件服务器。我们首先将应用程序配置为连接到端口 25 上的 smtp.domain.com 并且可以正常工作,它会发送电子邮件。

然后我们创建了一个自签名证书来测试我们是否可以通过安全通道发送消息。我创建了带有 openSSL 设置通用名称的证书:mail.domain.com、smtp.domain.com、*.domain.com、域名.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"
4

5 回答 5

1

正如格里洛瑞所说:

c# 4/.NET 4 将仅使用 TLS 和端口 587 发送;
hMailServer 目前不支持 STARTTLS

您可以在此处将您的 hMailServer 更新为 hMailServer 5.5.1 (BETA)
它现在支持 STARTTLS 并且端口 587 一切正常。

于 2014-10-08T09:18:48.120 回答
1

目前,无论 hMailServer 使用的证书是购买的还是自签名的,您都不能使用 c# 4/.NET 4 向 hMailServer 发送邮件。

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

请参阅 hMailServer 论坛上的此线程“配置 SSL 混淆...”

“SmtpClient.EnableSsl 属性”
“另一种连接方法是在发送任何协议命令之前预先建立 SSL 会话。这种连接方法有时称为 SMTP/SSL、SMTP over SSL 或 SMTPS,默认使用端口 465 。目前不支持这种使用 SSL 的替代连接方法。" ——MSDN

于 2011-12-04T20:09:28.590 回答
0

这是一种复杂的机制,但简而言之,客户端(您正在从中建立连接的计算机)应该知道 WHO 是证书颁发者(在您的情况下,您的服务器是证书颁发者)。如果它在受信任的根证书颁发机构列表中没有找到它,那么它认为此连接是不安全的。(我敢打赌,您已经看到浏览器警告您对某些 https://.... 站点的不安全请求)。

在客户端计算机上的 Microsoft 管理控制台中打开证书管理单元,并尝试将相同的自签名证书添加到受信任的根证书颁发机构列表中。

于 2010-06-22T19:13:22.273 回答
0

我在我的 hMailServer 上打开了端口 25 作为普通 SMTP 端口以及用于 SSL 的端口 465,所以我不得不更改我的代码以指向普通的 SMTP 配置。它应该在那之后工作。至于 SSL,对不起,它在 hMailServer 上不起作用......

        MailMessage message = new MailMessage();
        message.From = new MailAddress("me@myself.home", "Me");
        message.Body = "hello, World!";
        message.To.Add(new MailAddress("you@myself.home", "You"));

        SmtpClient client = new SmtpClient("secure.myself.home", 25);
        client.EnableSsl = false;
        client.UseDefaultCredentials = false;
        client.Credentials = new NetworkCredential("me@myself.home", "pwd");

        client.Send(message);
于 2014-02-27T19:04:09.110 回答
0

我安装了 hMailServer,创建了自签名证书,将其添加到 hMailServer,但也无法通过它发送邮件。虽然我在发送没有证书的电子邮件时成功了。

我启用了 hMailServer 的登录(对于所有内容)并再次尝试但没有运气。但我在日志文件中看到一个错误,说明

“严重性:2(高),代码:HM5113,来源:TCPServer::Run(),说明:加载证书文件失败。路径:<...>test.cer,地址:0.0.0.0,端口:25,错误:提供了无效参数”

也许这也是您的 hMailServer 上的一个案例?

于 2010-06-22T22:50:57.343 回答