Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Python3 TimeoutError: [Errno 110] Connection timed out  (Прочитано 2278 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн The Green Side

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1178
    • Просмотр профиля
Python3 TimeoutError: [Errno 110] Connection timed out
« : 01 Февраля 2020, 11:14:22 »
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
То есть соединение есть и сервис работает корректно.
Ищу конкретную часть кода, на которой затык:
Код: (Python) [Выделить]
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).
Код: (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 и он работал только так:
Код: (Python) [Выделить]
    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.
Правильный, рабочий, код выглядит так:

Код: (Python) [Выделить]
    server = smtplib.SMTP(host, port)
    server.starttls()
    server.ehlo()
    server.login(config.get("smtp", "login"), config.get("smtp", "password"))
« Последнее редактирование: 01 Февраля 2020, 11:42:18 от m-svo »
Debian 11, Debian 11 Server

 

Страница сгенерирована за 0.04 секунд. Запросов: 25.