2010-06-22 96 views
4

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

然后我们 创建一个自签名证书来测试,如果我们能够通过一个安全channel.I与OpenSSL的 设置通用名为发送 消息创建的证书:mail.domain.com,smtp.domain.com , * .domain.com,domain.com。我在防火墙上打开了端口587,并在 上配置了hmailserver,以便在该端口上使用 入站连接的证书。 无I创建工作的证书(我尝试之一,然后 创建另一个等),生成以下(通用)例外在 应用:

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) 80s连接关闭(FIN),两者之间没有任何关系。

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

感谢您的帮助!

PS:不知道这是否属于ServerFault,因为它涉及C#应用程序也是一个邮件服务器...

编辑:代码示例:

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

SmtpClient mailClient = new SmtpClient("smtp.domain.com"); 
mailClient.Credentials = new NetworkCredential("[email protected]", "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" 
+0

您可能会尝试提供您正在尝试执行的代码示例。我打算发布一个答案,但它与上面自签名链接上的一些响应相同。 – 2010-06-22 20:17:54

回答

0

这是一个复杂的机制,但在简单的话客户端(电脑,你正在做的连接)应该知道WHO是证书颁发者(在你的情况你的服务器是证书颁发者)。如果它在“受信任的根证书颁发机构”列表中找不到它,则认为该连接不安全。 (我敢打赌,你已经看到浏览器警告你对https:// ...站点的不安全请求)。

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

+0

不幸的是我已经尝试过这种方法,正如你可以在'谢谢'上面的段落中看到的那样...... – Richard 2010-06-22 19:44:36

0

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

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

"Severity: 2 (High), Code: HM5113, Source: TCPServer::Run(), Description: Failed to load certificate file. Path: <...>test.cer, Address: 0.0.0.0, Port: 25, Error: An invalid argument was supplied"

也许这是您的hMailServer的情况吗?

+0

是的,我应该已经启用了对所有事情的记录。感谢推!我会给一个+1,但我仍然缺乏声誉... 无论如何,我更新了什么日志显示的问题,这是一个不同的错误。 – Richard 2010-06-23 08:52:46

1

当前,您可以而不是使用c#4/.NET 4将邮件发送到hMailServer,无论hMailServer使用的证书是购买还是自签名。

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

看到这个线程"configuring SSL confusion ..."在hMailServer的论坛。

"SmtpClient.EnableSsl Property "
“的另一种连接方法是其中一个SSL会话被建立在前面的任何协议命令被发送之前,此连接方法有时被称为SMTP/SSL,SMTP通过SSL,或SMTPS和默认使用端口这种使用SSL的替代连接方法当前不受支持。“ - MSDN

0

我有我的端口25正常SMTP打开我的hMailServer以及端口465的SSL,所以我不得不改变我的代码,指向正常的SMTP配置。它应该在那之后工作。对于SSL,对不起,它不会在hMailServer工作...

 MailMessage message = new MailMessage(); 
     message.From = new MailAddress("[email protected]", "Me"); 
     message.Body = "hello, World!"; 
     message.To.Add(new MailAddress("[email protected]", "You")); 

     SmtpClient client = new SmtpClient("secure.myself.home", 25); 
     client.EnableSsl = false; 
     client.UseDefaultCredentials = false; 
     client.Credentials = new NetworkCredential("[email protected]", "pwd"); 

     client.Send(message); 
1

正如gerryLowry说:

c# 4/.NET 4 will only send using TLS and port 587;
hMailServer does not currently support STARTTLS

您可以更新您的hMailServer到hMailServer 5.5.1(BETA)here
它现在支持STARTTLS并且端口587都能正常工作。

相关问题