不要冻结发送邮件django

时间:2016-02-16 10:16:45

标签: django django-email

当django发送电子邮件时,根据smtp服务器的不同,需要几毫秒到几秒钟。所以我面临的问题是,当django开始发送电子邮件时,它会冻结在那里。用户必须等到邮件发送完毕。我想知道我是否可以简单地返回html页面,并且在后台可以发送电子邮件而不会让用户等待它。

骨架就是在呈现页面之前,正在发送电子邮件。所以,我想首先渲染页面,然后在后台发送电子邮件。

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

还有一个名为django-mailer的好项目。 它将邮件保存在您的数据库中,并通过crontab或celery异步发送。