在Django中与附件异步发送电子邮件

Joh*_*ohn 5 email django

我使用下面的代码发送带有pdf附件的电子邮件.但是,这是一个错误 - "断言没有内容".我不确定为什么会这样.我可以同步发送带有pdf的电子邮件,也可以发送没有pdf的电子邮件异步.(使用Django 1.3)

from django.core.mail import EmailMultiAlternatives
import threading
from django.core.mail import send_mail

class EmailThread(threading.Thread):
    def __init__(self, subject, body, from_email, recipient_list, fail_silently, html,pdf):
        self.subject = subject
        self.body = body
        self.recipient_list = recipient_list
        self.from_email = from_email
        self.fail_silently = fail_silently
        self.html = html
        self.pdf = pdf
        threading.Thread.__init__(self)

    def run(self):
        msg = EmailMultiAlternatives(self.subject, self.body, self.from_email, self.recipient_list)
        msg.attach('ticket.pdf',self.pdf,'application/pdf')
        if self.html:
            msg.attach_alternative(self.html, "text/html")
        msg.send(self.fail_silently)


def send_mail(subject, body, from_email, recipient_list, fail_silently=True, html=None,pdf=None, *args, **kwargs):
    EmailThread(subject, body, from_email, recipient_list, fail_silently, html, pdf).start()
Run Code Online (Sandbox Code Playgroud)

Yuj*_*ita 1

想想当您尝试发送不带附件的电子邮件时,您的代码会发生什么情况,正如send_mail.

  def run(self):
        msg = EmailMultiAlternatives(self.subject, self.body, self.from_email, self.recipient_list)
        msg.attach('ticket.pdf',self.pdf,'application/pdf')
        #                       ^^^^^^^^ is None. 
        if self.html:
            msg.attach_alternative(self.html, "text/html")
        msg.send(self.fail_silently)
Run Code Online (Sandbox Code Playgroud)

是的,您最终会尝试附加一个没有内容的文件。您需要确保仅在需要附加内容时才附加。无论如何,这有什么意义呢?有些ticket.pdf是空字符串?

另外,我赞同使用django-mailer.