с сен
Переносила отправку на новый сервер. На старом всё работало через 465, на новом соединение просто висит и отваливается по таймауту. На 587 то же самое письмо уходит за секунду.
Хостер говорит «у нас всё открыто». Что смотреть?
Переносила отправку на новый сервер. На старом всё работало через 465, на новом соединение просто висит и отваливается по таймауту. На 587 то же самое письмо уходит за секунду.
Хостер говорит «у нас всё открыто». Что смотреть?
Первым делом проверьте, что порт вообще доступен. Гадать тут нечего.
Если 465 висит именно так, дело не в вашем коде. Порт режется по дороге.
Так и есть, висит. Но почему тогда «у нас всё открыто»?
Потому что открыто у них, а режет чаще всего облачный провайдер или сеть на выходе. И ещё: 465 и 587 это две разные схемы. Один и тот же порядок с разными номерами тут не работает.
На 465 шифрование поднимается сразу, до первого слова. На 587 сначала идёт открытый разговор, клиент говорит EHLO, сервер перечисляет возможности, среди них STARTTLS, и только после команды обмен переходит в шифрование.
Практический вывод: если библиотека настроена на «шифрование сразу», а вы её направили на 587, она тоже повиснет. И наоборот.
Вот тут я и напутала. В коде стоял SMTP_SSL, я просто поменяла номер порта.
Да, это классика. Для 587 нужен обычный SMTP плюс starttls().
import smtplib
s = smtplib.SMTP("smtp.example.net", 587, timeout=20)
s.ehlo()
s.starttls()
s.ehlo()
s.login(user, password)
s.sendmail(ot, komu, pismo)
s.quit()
Обратите внимание на второй ehlo() после starttls(). Его забывают, и потом сервер отвечает, что метод входа неизвестен.
Добавлю сюда табличку, чтобы не искать по теме.
| Порт | Когда шифрование | Кто обычно ходит |
|---|---|---|
| 25 | по согласиюи, часто без | почтовые серверы между собой |
| 465 | сразу, до разговора | клиент, если сеть его пропускает |
| 587 | после команды STARTTLS | клиент, самый живучий вариант |
Заработало. Оставила 587, второй ehlo добавила. Спасибо всем.
Ольга, на будущее: если письма пойдут с сервера, у которого адрес меняется, проще завести постоянную точку выхода. У меня отправка идёт через сокетный туннель, чтобы адрес в заголовке Received был всегда один и тот же.
Пока с одного сервера, но идею запомню.
Набор новых участников приостановлен, пока разбираем очередь заявок. Открывать будем частями, чтобы модераторы успевали.
Чтение форума открыто целиком: все разделы, все темы, поиск по заголовкам. Ничего вводить не нужно.