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