Ubuntu Server 18.04
На VPS есть скрипт на Python3, который присылает мне емейлы.
Сегодня 01.02 не получил от него мейл, последний по плану был отправлен 26.01 успешно.
Начал разбираться, в логе запись:
Traceback (most recent call last):
File "/home/ubuntu/reminder/reminder.py", line 57, in <module>
server = smtplib.SMTP(host)
File "/usr/lib/python3.6/smtplib.py", line 251, in __init__
(code, msg) = self.connect(host, port)
File "/usr/lib/python3.6/smtplib.py", line 336, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "/usr/lib/python3.6/smtplib.py", line 307, in _get_socket
self.source_address)
File "/usr/lib/python3.6/socket.py", line 724, in create_connection
raise err
File "/usr/lib/python3.6/socket.py", line 713, in create_connection
sock.connect(sa)
TimeoutError: [Errno 110] Connection timed out
Сначала подозреваю хостинг, выполняю их troubleshooting guide - всё работает, получаю тестовый мейл...
Там были команды такого типа
telnet email-smtp.eu-central-1.amazonaws.com 587
telnet email-smtp.eu-central-1.amazonaws.com 465
openssl s_client -crlf -quiet -starttls smtp -connect email-smtp.eu-central-1.amazonaws.com:587 < input.txt
То есть соединение есть и сервис работает корректно.
Ищу конкретную часть кода, на которой затык:
import smtplib
server = smtplib.SMTP("email-smtp.eu-central-1.amazonaws.com")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.6/smtplib.py", line 251, in __init__
(code, msg) = self.connect(host, port)
File "/usr/lib/python3.6/smtplib.py", line 336, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "/usr/lib/python3.6/smtplib.py", line 307, in _get_socket
self.source_address)
File "/usr/lib/python3.6/socket.py", line 724, in create_connection
raise err
File "/usr/lib/python3.6/socket.py", line 713, in create_connection
sock.connect(sa)
TimeoutError: [Errno 110] Connection timed out
Это работает корректно на локальном ПК (другая версия Python).
import smtplib
server = smtplib.SMTP("email-smtp.eu-central-1.amazonaws.com")
server.quit()
(451, b'4.4.2 Timeout waiting for data from client.')
Уточняю про /usr/lib/python3.6/socket.py:
$ dpkg -S /usr/lib/python3.6/socket.py
libpython3.6-minimal:amd64: /usr/lib/python3.6/socket.py
Пакет обновлялся последний раз 28.11.19
Перезагрузка VPS не помогла.
Есть идеи?
Пользователь добавил сообщение 01 Февраля 2020, 11:42:18:
Фуф, разобрался.
Авторизация была вот такая, кривая, потому что раньше использовался smtp.gmail.com и он работал только так:
server = smtplib.SMTP(host)
server.connect(host, port)
server.ehlo()
server.starttls()
server.ehlo()
server.login(config.get("smtp", "login"), config.get("smtp", "password"))
Сейчас, очевидно, изменилась конфигурация текущего SMTP сервера, и эта кривизна больше не работает - хотя я должен был оставить себе комментарий и удалить её при уходе с gmail.
Правильный, рабочий, код выглядит так:
server = smtplib.SMTP(host, port)
server.starttls()
server.ehlo()
server.login(config.get("smtp", "login"), config.get("smtp", "password"))