TimeoutError при отправке почты

У меня есть проект Django, в котором пользователи могут запустить задачу, которая выполняется с помощью Celery, а затем они получают письмо, когда эта задача завершена.

Моя проблема заключается в том, что мои письма не отправляются каждый раз. Некоторые письма не отправляются, а в консоли у меня TimeoutError: [Errno 10060] WSAETIMEDOUT. Я не знаю, может ли это помочь, но я заметил, что когда я начинаю пытаться отправлять письма, первые письма выдают эту ошибку, а после некоторого времени попыток отправки писем, примерно 15млн, письма отправляются успешно, и я не получаю никакой ошибки после этого.

Я перепробовал все решения, которые смог найти здесь на SO, а также на GitHub, но ни одно из предложенных решений не сработало для меня.

Я использую gmail с двойной аутентификацией. У меня есть это в моем settings.py файле :

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'my-email-account'
EMAIL_HOST_PASSWORD = 'my-password'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL = 'emaildetest81@gmail.com'

Моя функция отправки электронной почты :

from django.core.mail import EmailMessage
from django.conf import settings

def send_output_file(mail):
    header = "Result of task execution"
    body = "Your task has finished executing !" 
    
    email = EmailMessage(header, body, settings.DEFAULT_FROM_EMAIL, [mail,],)
        
    return email.send(fail_silently=False)

И трассировка ошибки, которую я получаю :

Traceback (most recent call last):
  File "C:\Users\stephane.bernardelli\Documents\ScriptsApp\.env\lib\site-packages\celery\app\trace.py", line 451, in trace_task
    R = retval = fun(*args, **kwargs)
  File "C:\Users\stephane.bernardelli\Documents\ScriptsApp\.env\lib\site-packages\celery\app\trace.py", line 734, in __protected_call__
    return self.run(*args, **kwargs)
  File "C:\Users\stephane.bernardelli\Documents\ScriptsApp\src\scripts\tasks.py", line 45, in send_result
    raise self.retry(exc=exc, max_retries=5)
  File "C:\Users\stephane.bernardelli\Documents\ScriptsApp\.env\lib\site-packages\celery\app\task.py", line 717, in retry
    raise_with_context(exc)
  File "C:\Users\stephane.bernardelli\Documents\ScriptsApp\src\scripts\tasks.py", line 43, in send_result
    send_output_file(script_id, task_id, variables.get('email'))
  File "C:\Users\stephane.bernardelli\Documents\ScriptsApp\src\scripts\email.py", line 19, in send_output_file
    return email.send(fail_silently=False)
  File "C:\Users\stephane.bernardelli\Documents\ScriptsApp\.env\lib\site-packages\django\core\mail\message.py", line 298, in send
    return self.get_connection(fail_silently).send_messages([self])
  File "C:\Users\stephane.bernardelli\Documents\ScriptsApp\.env\lib\site-packages\django\core\mail\backends\smtp.py", line 124, in send_messages
    new_conn_created = self.open()
  File "C:\Users\stephane.bernardelli\Documents\ScriptsApp\.env\lib\site-packages\django\core\mail\backends\smtp.py", line 80, in open
    self.connection = self.connection_class(
  File "C:\Program Files\Python310\lib\smtplib.py", line 255, in __init__
    (code, msg) = self.connect(host, port)
  File "C:\Program Files\Python310\lib\smtplib.py", line 341, in connect
    self.sock = self._get_socket(host, port, self.timeout)
  File "C:\Program Files\Python310\lib\smtplib.py", line 312, in _get_socket
    return socket.create_connection((host, port), timeout,
  File "C:\Users\stephane.bernardelli\Documents\ScriptsApp\.env\lib\site-packages\eventlet\green\socket.py", line 63, in create_connection
    raise err
  File "C:\Users\stephane.bernardelli\Documents\ScriptsApp\.env\lib\site-packages\eventlet\green\socket.py", line 53, in create_connection
    sock.connect(sa)
  File "C:\Users\stephane.bernardelli\Documents\ScriptsApp\.env\lib\site-packages\eventlet\greenio\base.py", line 256, in connect
    socket_checkerr(fd)
  File "C:\Users\stephane.bernardelli\Documents\ScriptsApp\.env\lib\site-packages\eventlet\greenio\base.py", line 54, in socket_checkerr
    raise socket.error(err, errno.errorcode[err])
TimeoutError: [Errno 10060] WSAETIMEDOUT
Вернуться на верх