2016-02-16 6 views
1

Когда django отправляет электронное письмо, оно занимает от нескольких миллисекунд до нескольких секунд в зависимости от сервера smtp. Таким образом, проблема, с которой я столкнулся, - это когда django начинает отправлять электронную почту, это зависнет там. Пользователю придется подождать, пока почта не будет отправлена. Мне было интересно, могу ли я просто вернуть html-страницу, и в фоновом режиме электронная почта может быть отправлена ​​без ожидания пользователя.dont freeze при отправке почты django

Скелет - это то, что прямо перед тем, как страница отображается, отправляется электронное письмо. Итак, я хочу сначала отобразить страницу, а затем отправить электронное письмо в фоновом режиме.

ответ

3

я сделал что-то вроде этого в моем проекте, который использует тему:

class EmailThread(Thread): 
    def __init__(self, myemail): 
     self.myemail = myemail 
     Thread.__init__(self) 

    def run(self): 
     self.myemail.send() 

class MyEmailMessage(EmailMessage): 
    def send_async(self, fail_silently=False): 
     thread = EmailThread(self) 
     thread.start() 

# send email 
email = MyEmailMessage(...) 
email.send_async() 
+0

Я думаю, что это сработает. Позвольте вам узнать :) спасибо. –

0

Там также хороший проект под названием django-mailer. Он сохраняет почту в вашей базе данных, и вы отправляете их асинхронно через crontab или сельдерей.