hmailserver 5.3.2 をインストールして構成しました。メールの送受信は普通にできますが、別サーバーにある.net/C#アプリからのメール送信に使いたいので、SSL通信を使いたいと思いました。以前は、アプリケーションはポート 587 で gmail 経由でメールを送信するように構成されていましたが、問題なく動作していましたが、今は独自のメール サーバーを使用したいと考えています。最初に、ポート 25 の smtp.domain.com に接続するようにアプリケーションを構成しました。これが機能し、電子メールが送信されます。
次に、安全なチャネルを介してメッセージを送信できるかどうかをテストするために、自己署名証明書を作成しました。openSSL 設定共通名で証明書を作成しました: mail.domain.com、smtp.domain.com、*.domain.com、 domain.com. ファイアウォールでポート 587 を開き、そのポートでのインバウンド接続に証明書を使用するように hmailserver を構成しました。作成した証明書はどれも機能せず (1 つ試してから別の証明書を作成するなど)、アプリケーションで次の (一般的な) 例外が生成されました。
System.Exception: _COMPlusExceptionCode = -532459699
もちろん、telnet 経由で接続しようとしました: telnet smtp.domain.com 587 で、空白の画面が表示されました。ポート 587 で ssl を無効にすると正常に接続できるため、ファイアウォールの問題ではありません。ログを見ると、SSL で 587 を使用しているときに接続しようとしている様子さえありません。
私はすでにこれらの質問をチェックしました:Getting SmtpClient to work with a self signed SSL certificateとUsing a self-signed certificate with .NET's HttpWebRequest/Response、しかしそれは私の問題を解決しませんでした。ServerCertificateValidationCallbackを使用したアプローチには何の影響もありませんでした。
ポート 25 (上記の質問の 1 つでも提案されています)、465、587 で試してみましたが、3 つすべてで同じことが起こります: 最初のハンドシェイク (SYN / SYN-ACK / ACK) と約 80 秒後に接続はクローズド (FIN)、間に何もありません。
その証明書をどこかにインストールして、.net アプリケーションが信頼できると見なす必要がありますか? つまり、すでに信頼されたルート認証局としてインストールしており、mmc を実行して確認できたので、どこに行けばよいかわかりません...
助けてくれてありがとう!
PS: C# アプリケーションだけでなくメール サーバーにも関係するため、これが ServerFault に属するかどうかはわかりません...
編集:コードサンプル:
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);
EDIT 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"