Если вы используете Яндекс.
Почту для домена, то, скорее всего, вы уже знаете, что неделю назад, 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 в SmtpClient, когда соединение устанавливается через порт 25 в незашифрованном виде, а затем переключается в безопасный режим.
Однако т.к.
решение не очевидно, я решил опубликовать его, чтобы сэкономить время тем, кто столкнется с этой проблемой.
Теги: #.
net smtp yandex ssl #.
NET
-
Соль За 10 Минут
19 Oct, 24