Pull to refresh

Использование SmtpClient для отправления почты через SMTP сервер Яндекса с SSL

.NET *
Если вы используете Яндекс.Почту для домена, то скорее всего уже знаете что неделю назад с 16 сентября 2014 г. SMTP сервер Яндекса smtp.yandex.ru полностью перешел на SSL, о чем компания добросовестно уведомила клиентов (говорю безо всякого сарказма, действительно сработали добросовестно). В почтовой рассылке были приведены инструкции для популярных почтовых клиентов о том, какие изменения в них необходимо произвести, чтобы почта работала после перехода на SSL: Шифрование передаваемых данных. Если кратко, то в настройках SMTP надо указать порт 465 и включить опцию шифрование SSL. Однако, если у вас есть свое .Net приложение, в котором для отправления почты используется стандартный класс System.Net.Mail.SmtpClient, то при попытке использовать эти инструкции возникнет исключение с сообщением о превышении времени ожидания.

Прочитав приведенные выше инструкции, мы могли бы ожидать, что следующий код отработает без проблем:
var msg = new MailMessage(from, to, subj, body);
var smtpClient = new SmtpClient("smtp.yandex.ru", 465);
smtpClient.Credentials = new NetworkCredential(username, pwd);
smtpClient.EnableSsl = true;
smtpClient.Send(msg);

Однако, как было отмечено выше, при попытке послать письмо генерируется исключение. Чтобы код работал, по-прежнему нужно использовать стандартный SMTP порт 25, как для незащищенных соединений, но указав при этом EnableSsl = true:
var msg = new MailMessage(from, to, subj, body);
var smtpClient = new SmtpClient("smtp.yandex.ru", 25);
smtpClient.Credentials = new NetworkCredential(username, pwd);
smtpClient.EnableSsl = true;
smtpClient.Send(msg);

Возможно, это обусловлено реализацией режима явного SSL (explicit SSL) в SmtpClient, когда соединение устанавливается через 25 порт в незашифрованном виде, а затем переключается в защищенный режим. Тем не менее, т.к. решение неочевидное, решил опубликовать его, чтобы сэкономить время тем, кто столкнется с этой проблемой.
Tags:
Hubs:
Total votes 17: ↑13 and ↓4 +9
Views 79K
Comments Comments 14