Python/Django:后台发送邮件

19 投票
3 回答
14878 浏览
提问于 2025-04-17 03:31

想象一下,有一个用户在网站上进行了一项操作,然后管理员们需要收到通知。假设有20个管理员需要通知。如果用Django的普通方法发送邮件,用户就得等到所有邮件都发完了才能继续操作。

那么,有没有办法把所有的邮件发送放在一个单独的进程里,这样用户就不用等了呢?这可能吗?

3 个回答

5

如果我们只需要一次发送20封邮件,使用线程可能是一个可行的解决办法。对于那些比较耗时的后台任务,可以使用Celery。

下面是一个使用线程的示例:

# This Python file uses the following encoding: utf-8

#threading
from threading import Thread

...

class afegeixThread(Thread):
    
    def __init__ (self,usuari, parameter=None):
        Thread.__init__(self)
        self.parameter = parameter
        ...
      
    def run(self):        
        errors = []
        try:
             if self.paramenter:
                   ....
        except Exception, e:                
             ...
...

n = afegeixThread( 'p1' )
n.start()
7

另一个选择是django-mailer。它会把邮件放到一个数据库表里排队,然后你可以用定时任务(cron job)来发送这些邮件。

https://github.com/pinax/django-mailer

25

使用 celery 作为任务队列,还有 django-celery-email,这是一个Django的邮件发送工具,它可以把发送邮件的工作交给celery来处理。

撰写回答