2010-06-22 95 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都能正常工作。

相關問題