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


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

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

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

Оффлайн The Green Side

  • Автор темы
  • Активист
  • *
  • Сообщений: 825
    • Просмотр профиля
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
  1. import smtplib
  2. server = smtplib.SMTP("email-smtp.eu-central-1.amazonaws.com")
  3. Traceback (most recent call last):
  4.   File "<stdin>", line 1, in <module>
  5.   File "/usr/lib/python3.6/smtplib.py", line 251, in __init__
  6.     (code, msg) = self.connect(host, port)
  7.   File "/usr/lib/python3.6/smtplib.py", line 336, in connect
  8.     self.sock = self._get_socket(host, port, self.timeout)
  9.   File "/usr/lib/python3.6/smtplib.py", line 307, in _get_socket
  10.     self.source_address)
  11.   File "/usr/lib/python3.6/socket.py", line 724, in create_connection
  12.     raise err
  13.   File "/usr/lib/python3.6/socket.py", line 713, in create_connection
  14.     sock.connect(sa)
  15. TimeoutError: [Errno 110] Connection timed out
  16.  

Это работает корректно на локальном ПК (другая версия Python).
Код: Python
  1. import smtplib
  2. server = smtplib.SMTP("email-smtp.eu-central-1.amazonaws.com")
  3. server.quit()
  4. (451, b'4.4.2 Timeout waiting for data from client.')
  5.  

Уточняю про /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
  1.     server = smtplib.SMTP(host)
  2.     server.connect(host, port)
  3.     server.ehlo()
  4.     server.starttls()
  5.     server.ehlo()
  6.     server.login(config.get("smtp", "login"), config.get("smtp", "password"))
  7.  

Сейчас, очевидно, изменилась конфигурация текущего SMTP сервера, и эта кривизна больше не работает - хотя я должен был оставить себе комментарий и удалить её при уходе с gmail.
Правильный, рабочий, код выглядит так:

Код: Python
  1.     server = smtplib.SMTP(host, port)
  2.     server.starttls()
  3.     server.ehlo()
  4.     server.login(config.get("smtp", "login"), config.get("smtp", "password"))
  5.  
« Последнее редактирование: 01 Февраль 2020, 11:42:18 от m-svo »
Debian Testing (Gnome), Ubuntu 20.04, Xubuntu 20.04, Ubuntu Server 18.04

 

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