Я установил hmailserver 5.3.2 и настроил его.Он получает и отправляет электронные письма в обычном режиме, но я хотел использовать его для отправки электронных писем из приложения .net / C #, расположенного на другом сервере, и для этого я хотел использовать связь SSL.Раньше приложение было настроено на отправку писем по электронной почте через порт 587, и оно работало нормально, но теперь мы хотим использовать наш собственный почтовый сервер.Сначала мы настроили приложение для подключения к smtp.domain.com через порт 25, и оно работает, оно отправляет электронное письмо.
Затем мы создали самозаверяющий сертификат, чтобы проверить, можно ли отправить сообщение через безопасныйchannel.I создал сертификат с openSSL, установив общее имя как: mail.domain.com, smtp.domain.com, * .domain.com, domain.com.Я открыл порт 587 на брандмауэре и настроил hmailserver для использования сертификата для входящих подключений на этом порту.Ни один из сертификатов, которые я создал, не работал (я пробовал один, а затем создал другой и т. Д.), Генерируя в приложении следующее (универсальное) исключение:
System.Exception: _COMPlusExceptionCode = -532459699
Конечно, я также пытался подключиться через telnet: telnet smtp.domain.com 587, и я только что получил пустой экран.Это не проблема брандмауэра, так как, когда я отключаю ssl на порту 587, я могу подключиться нормально.Просмотр журнала даже не показывает попытки подключения при использовании 587 с SSL.
Я уже проверил следующие вопросы: Получение SmtpClient для работы с самоподписанным сертификатом SSL и Использование самозаверяющего сертификата с .NET HttpWebRequest / Response , но это не решило мою проблему.Подход с ServerCertificateValidationCallback не оказал никакого влияния.
Я пробовал с портами 25 (что также предлагается в одном из вопросов выше), 465, 587 и со всеми 3 егопроисходит то же самое: начальное рукопожатие (SYN / SYN-ACK / ACK) и примерно через 80 с соединение закрывается (FIN), ничего между ними.
Нужно ли где-то устанавливать этот сертификат, чтобы приложение .net считало его доверенным?Я имею в виду, я уже установил его как Trusted Root Certification Authority и мог проверить, запустив 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: Журнал (на основе Рамунаса'предложение):
"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"