Я установил hmailserver 5.3.2 и настроил его. Он обычно принимает и отправляет электронные письма, но я хотел использовать его для отправки электронных писем из приложения .net / C #, расположенного на другом сервере, и для этого я хотел использовать связь SSL. Раньше приложение было настроено на отправку писем через Gmail через порт 587, и оно работало нормально, но теперь мы хотим использовать наш собственный почтовый сервер. Сначала мы настроили приложение для подключения к smtp.domain.com через порт 25, и оно работает, оно отправляет электронное письмо.
Затем мы создали самоподписанный сертификат, чтобы проверить, можем ли мы отправить сообщение через безопасный канал. Я создал сертификат с установкой общего имени 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 считало его доверенным? Я имею в виду, что я уже установил его как доверенный корневой центр сертификации и мог проверить, запустив 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: Журнал (на основе предложения Рамунаса):
"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"
signed link
выше. - person Matthew Whited   schedule 23.06.2010