【问题标题】:how to send asynchronous email using django如何使用 django 发送异步电子邮件
【发布时间】:2011-05-25 17:28:41
【问题描述】:

这是我的代码:

class EmailThread(threading.Thread):
    def __init__(self, subject, html_content, recipient_list):
        self.subject = subject
        self.recipient_list = recipient_list
        self.html_content = html_content
        threading.Thread.__init__(self)

    def run (self):
        msg = EmailMultiAlternatives(self.subject, self.html_content, EMAIL_HOST_USER, self.recipient_list)
        #if self.html_content:
        msg.attach_alternative(True, "text/html")
        msg.send()

def send_mail(subject, html_content, recipient_list):
    EmailThread(subject, html_content, recipient_list).start()

它不发送电子邮件。我能做什么?

【问题讨论】:

    标签: python django email asynchronous


    【解决方案1】:

    现在好了;

    import threading
    from threading import Thread
    
    class EmailThread(threading.Thread):
        def __init__(self, subject, html_content, recipient_list):
            self.subject = subject
            self.recipient_list = recipient_list
            self.html_content = html_content
            threading.Thread.__init__(self)
    
        def run (self):
            msg = EmailMessage(self.subject, self.html_content, EMAIL_HOST_USER, self.recipient_list)
            msg.content_subtype = "html"
            msg.send()
    
    def send_html_mail(subject, html_content, recipient_list):
        EmailThread(subject, html_content, recipient_list).start()
    

    【讨论】:

    • 有谁知道线程在 Django 中是否像预期的那样工作?这个其他相关的答案stackoverflow.com/questions/13567160/… 似乎暗示了其他情况。如果有帮助,我使用 Mailgun 来解决这个问题。无需 SDK。极其简单的 API。提供免费层级。我不隶属于他们。
    • Mailgun 实际上并不能解决所提出的问题。他想异步发送电子邮件。电子邮件将使用一些可以是 mailgun 但异步发送的 smpt 服务器发送,必须使用线程/芹菜或任何解决方案。
    • Celery 对于发送电子邮件来说绝对是一种过度杀伤力。这是处理异步发送电子邮件的更好方法。
    • 知道为什么 EmailMultiAlternatives 不起作用?
    • 这拯救了我的一天!非常感谢,我一直在努力使用 Celery 发送异步电子邮件,但这太棒了!
    【解决方案2】:

    从长远来看,使用第三方 Django 应用程序(例如 django-mailer)来处理各种异步电子邮件发送/管理要求可能是一个不错的决定。

    【讨论】:

    • 我查看了 django-mailer,它似乎没有提供任何“立即”发送电子邮件的功能,例如电子邮件验证。
    【解决方案3】:

    在检查了基于 celery 等的更复杂的解决方案后,我发现 django-post_office (https://github.com/ui/django-post_office) 这是一个非常简单的数据库 + cron 作业插件,需要 5 分钟才能启动和运行。在我的本地开发机器和 Heroku 上都能完美运行。

    【讨论】:

      猜你喜欢
      • 2015-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-11
      • 2020-10-15
      • 1970-01-01
      • 2015-02-05
      相关资源
      最近更新 更多