Python/Django:在后台发送电子邮件

发布于 2024-12-07 15:12:21 字数 136 浏览 3 评论 0原文

想象一下用户在网站上执行操作并通知管理员的情况。 想象一下有 20 名管理员需要通知。通过使用 Django 发送电子邮件的常规方法,用户必须等到所有电子邮件发送完毕才能继续。

如何在单独的进程中发送所有电子邮件,以便用户不必等待?是否可以?

Imagine a situation in which a user performs an action on a website and admins are notified.
Imagine there are 20 admins to notify. By using normal methods for sending emails with Django the user will have to wait until all the emails are sent before being able to proceed.

How can I send all the emails in a separate process so the user doesn't have to wait? Is it possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

_蜘蛛 2024-12-14 15:12:21

使用 celery 作为任务队列和 django-celery-email 这是一个 Django 电子邮件后端,用于将电子邮件发送到 celery 任务。

Use celery as a task queue and django-celery-email which is an Django e-mail backend that dispatches e-mail sending to a celery task.

日久见人心 2024-12-14 15:12:21

另一个选择是 django-mailer。它将邮件在数据库表中排队,然后您使用 cron 作业来发送它们。

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

Another option is django-mailer. It queues up mail in a database table and then you use a cron job to send them.

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

寂寞清仓 2024-12-14 15:12:21

如果我们每次只发送 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()

If we are talking about to send only 20 mails time by time, a thread may be a possible solution. For expensive background tasks use Celery.

This is a sample using thread:

# 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()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文