Комментарии 14
А какое исключение генерируется при отправке на 465 порт? На порту для ssl всё же точно должно работать.
На 25ом порту во время сессии можно включить STARTTLS, видимо smtpClient ровно это и делает.
Возможно в первом случае вы пытаетесь использовать STARTTLS под уже включенным ssl-соединением, и клиенту становится плохо:)
На 25ом порту во время сессии можно включить STARTTLS, видимо smtpClient ровно это и делает.
Возможно в первом случае вы пытаетесь использовать STARTTLS под уже включенным ssl-соединением, и клиенту становится плохо:)
+2
> А какое исключение генерируется при отправке на 465 порт? На порту для ssl всё же точно должно работать.
timeout exception. Работать-то через 465 порт оно может и должно, но не работает.
> Возможно в первом случае вы пытаетесь использовать STARTTLS под уже включенным ssl-соединением, и клиенту становится плохо:)
скорее всего так и есть, однако SmtpClient скрывает низкоуровневые детали протокола, поэтому напрямую команды SMTP посылать серверу через него нельзя. Так что этот комментарий относится скорее к тому, что происходит внутри класса. Статья была именно про то, как отправлять почту через сервер Яндекса, используя доступный интерфейса SmtpClient.
Вообще идея про то, что что-то не так с 465 портом пришла ко мне после попыток подключится к smtp.yandex.ru через telnet:
вызывало непонятные глюки. Ошибки соединения не было, но консоль сходила с ума: каретка переводилась вначало окна и символы при печати накладывались на уже выведенный ранее текст. Сами символы команд и результатов выполнения при этом были невидимые. Хотя с 25 портом подключение было успешным:
Все это натолкнуло меня на идею попробовать код, который в итоге заработал и который я привел в статье.
timeout exception. Работать-то через 465 порт оно может и должно, но не работает.
> Возможно в первом случае вы пытаетесь использовать STARTTLS под уже включенным ssl-соединением, и клиенту становится плохо:)
скорее всего так и есть, однако SmtpClient скрывает низкоуровневые детали протокола, поэтому напрямую команды SMTP посылать серверу через него нельзя. Так что этот комментарий относится скорее к тому, что происходит внутри класса. Статья была именно про то, как отправлять почту через сервер Яндекса, используя доступный интерфейса SmtpClient.
Вообще идея про то, что что-то не так с 465 портом пришла ко мне после попыток подключится к smtp.yandex.ru через telnet:
o smtp.yandex.ru 465
вызывало непонятные глюки. Ошибки соединения не было, но консоль сходила с ума: каретка переводилась вначало окна и символы при печати накладывались на уже выведенный ранее текст. Сами символы команд и результатов выполнения при этом были невидимые. Хотя с 25 портом подключение было успешным:
o smtp.yandex.ru 25
Все это натолкнуло меня на идею попробовать код, который в итоге заработал и который я привел в статье.
+1
На 465 порте живёт устаревший SMTPS, который подразумевает установку защищённого содениня сразу. STARTTLS работает на портах 25 и 587, фиг знает почему Яндекс это не афиширует.
0
А почему вы считаете что SMTPS устаревший?
0
Так написано в Википедии:
en.wikipedia.org/wiki/SMTPS
en.wikipedia.org/wiki/SMTPS
0
Знакомая история. Mail.ru то же теперь работает только через SSL. И там та же проблема.
Причина из за того что SmtpClient поддерживает только Explicit SSL. Поэтому он должен сперва коннектиться к 25 порту, а потом начинать шифровать. Опять же, при условие что сервер так настроен. А если сервер настроен, чтоб получить сразу SSL/TLS, тогда без бубна отправить письмо не получиться.
Вдруг кому пригодится:
stackoverflow.com/questions/1011245/how-can-i-send-emails-through-ssl-smtp-with-the-net-framework
stackoverflow.com/questions/172811/is-there-a-way-i-can-tell-whether-an-smtp-server-is-expecting-a-client-to-connect/172860#172860
Причина из за того что SmtpClient поддерживает только Explicit SSL. Поэтому он должен сперва коннектиться к 25 порту, а потом начинать шифровать. Опять же, при условие что сервер так настроен. А если сервер настроен, чтоб получить сразу SSL/TLS, тогда без бубна отправить письмо не получиться.
Вдруг кому пригодится:
stackoverflow.com/questions/1011245/how-can-i-send-emails-through-ssl-smtp-with-the-net-framework
stackoverflow.com/questions/172811/is-there-a-way-i-can-tell-whether-an-smtp-server-is-expecting-a-client-to-connect/172860#172860
+5
Буквально сегодня исправлял приложение не Delphi. Там это решается тоже легко и просто:
1. Кидаю на форму SSLIOHandler.
2. Прикручиваю его хэндлером к используемому idSmtp из стандартной indy библиотеки.
3. Свойство useTLS ставлю useRequireTLS.
Все замечательно ходит.
И да, порт тоже оставил 25.
1. Кидаю на форму SSLIOHandler.
2. Прикручиваю его хэндлером к используемому idSmtp из стандартной indy библиотеки.
3. Свойство useTLS ставлю useRequireTLS.
Все замечательно ходит.
И да, порт тоже оставил 25.
0
> Буквально сегодня исправлял приложение не Delphi…
> Кидаю на форму…
эх, ностальгия
> Кидаю на форму…
эх, ностальгия
0
Тоже вчера правил программу на Delphi для smtp.mail.ru, и тоже с Indy 10,
у меня все работает при отправке на 465 порт, т.е. как и положено
еще нюанс имеется один — email отправителя должен быть реальным адресом на *mail.ru, логин от которого используется для авторизации по TLS, иначе не работает.
у меня все работает при отправке на 465 порт, т.е. как и положено
IdSMTP.UseTLS := utUseImplicitTLS;
IdSMTP.AuthType:= satDefault;
еще нюанс имеется один — email отправителя должен быть реальным адресом на *mail.ru, логин от которого используется для авторизации по TLS, иначе не работает.
0
у меня заработало только с 587 портом. С 25 портом timeout.
var msg = new MailMessage(from, to, subj, body);
var smtpClient = new SmtpClient("smtp.yandex.ru", 587);
smtpClient.Credentials = new NetworkCredential(username, pwd);
smtpClient.EnableSsl = true;
smtpClient.Send(msg);
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Использование SmtpClient для отправления почты через SMTP сервер Яндекса с SSL