Django Время ожидания электронной почты на производственном сервере - PullRequest
0 голосов
/ 01 февраля 2020

Я недавно развернул сайт, который я разработал в Django, на производственном сервере с Ubuntu 19.10 и Apache / 2.4.41. Я смог заставить мой сайт функционировать во всех отношениях, за исключением отправки электронной почты с использованием SMTP. При запуске моего сайта на сервере разработки на моем локальном компьютере Django может отправлять электронные письма без проблем, но на рабочем сервере любая попытка сайта отправить электронную почту зависает и в конечном итоге приводит к ошибке сервера. В Apache error.log я нахожу это в нижней части трассировки: TimeoutError: [Errno 110] Connection timed out. Любопытно, что эта проблема сохраняется, если я включаю порт 8000 и запускаю этот сайт с сервера разработки Django с удаленного компьютера.

Я убедился, что мой файл settings.py настроен правильно (так как я упомянул, что это прекрасно работает на моем локальном компьютере).

settings.py

...
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True

EMAIL_HOST_USER = site_config.get('EMAIL_USER')
EMAIL_HOST_PASSWORD = site_config.get('EMAIL_PASS')

Я подозреваю, что проблема должна быть связана с моим брандмауэром, блокирующим исходящий трафик c на порту 587, но я дважды проверил свои настройки и не мог понять, как это могло быть. Я даже вручную установил правила, чтобы разрешить исходящий трафик c через порты 587 и 25, но безуспешно.

ufw status

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere                  
80/tcp                     ALLOW IN    Anywhere                  
22/tcp (v6)                ALLOW IN    Anywhere (v6)             
80/tcp (v6)                ALLOW IN    Anywhere (v6)             

587                        ALLOW OUT   Anywhere                  
25/tcp                     ALLOW OUT   Anywhere                  
587 (v6)                   ALLOW OUT   Anywhere (v6)             
25/tcp (v6)                ALLOW OUT   Anywhere (v6) 

Я пытался проверить, что могу установить sh SMTP-соединения вообще, используя совет, предложенный в этом посте , и там также произошла ошибка тайм-аута.

Все похоже, это указывает на какую-то ошибку в настройке моего брандмауэра и / или Apache, но после прочтения ряда сообщений в SO и других местах я чувствую, что у меня закончились идеи.

Наконец, вот что я вижу в журнале ошибок:

/ var / log / apache2 / error.log

     log: ERROR - Internal Server>
    Traceback (most recent call last):
      File "/home/user/mysite/venv>
        response = get_response(request)
      File "/home/user/mysite/venv>
        response = self.process_exception_by_middleware(e,>
      File "/home/user/mysite/venv>
        response = wrapped_callback(request, *callback_arg>
      File "/home/user/mysite/venv>
        return self.dispatch(request, *args, **kwargs)
      File "/home/user/mysite/venv>
        return bound_method(*args, **kwargs)
      File "/home/user/mysite/venv>
        response = view_func(request, *args, **kwargs)
      File "/home/user/mysite/venv>
        return super().dispatch(*args, **kwargs)
      File "/home/user/mysite/venv>
        return handler(request, *args, **kwargs)
      File "/home/user/mysite/venv>
        return self.form_valid(form)
      File "/home/user/mysite/venv>
        form.save(**opts)
      File "/home/user/mysite/venv>
        user_email, html_email_template_name=html_email_te>
      File "/home/user/mysite/venv>
        email_message.send()
      File "/home/user/mysite/venv>
        return self.get_connection(fail_silently).send_mes>
      File "/home/user/mysite/venv>
        new_conn_created = self.open()
      File "/home/user/mysite/venv>
        self.connection = self.connection_class(self.host,>
      File "/usr/lib/python3.7/smtplib.py", line 251, in _>
        (code, msg) = self.connect(host, port)
      File "/usr/lib/python3.7/smtplib.py", line 336, in c>
        self.sock = self._get_socket(host, port, self.time>
      File "/usr/lib/python3.7/smtplib.py", line 307, in _>
        self.source_address)
      File "/usr/lib/python3.7/socket.py", line 727, in cr>
        raise err
      File "/usr/lib/python3.7/socket.py", line 716, in cr>
        sock.connect(sa)
    TimeoutError: [Errno 110] Connection timed out

I ' Я с радостью добавлю больше информации, если есть что-то важное, что я пропустил. Это моя первая попытка развертывания сайта на удаленном сервере, поэтому имейте в виду, что для меня все это немного ново.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...