使用Django中的附件异步发送电子邮件

使用Django中的附件异步发送电子邮件,django,email,Django,Email,我使用下面的代码发送带有pdf附件的电子邮件。但是,这是一个错误——“断言没有内容”。我不知道为什么会这样。我可以同步发送pdf格式的电子邮件,也可以异步发送没有pdf格式的电子邮件。 (使用Django 1.3) 想想当你试图发送一封没有附件的电子邮件时,你的代码会发生什么,就像send\u mail所期望的那样 def run(self): msg = EmailMultiAlternatives(self.subject, self.body, self.from_em

我使用下面的代码发送带有pdf附件的电子邮件。但是,这是一个错误——“断言没有内容”。我不知道为什么会这样。我可以同步发送pdf格式的电子邮件,也可以异步发送没有pdf格式的电子邮件。 (使用Django 1.3)


想想当你试图发送一封没有附件的电子邮件时,你的代码会发生什么,就像
send\u 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)
是的,您将尝试附加一个没有内容的文件。您需要确保只有在有东西要连接时才连接。那到底有什么意义呢?一些
ticket.pdf
是空字符串吗


另外,我支持使用
django-mailer

当您调用send\u-mail时,什么是pdf和html?(在django.core.mail.message中,
assert content not None
检查了这两件事。)在调用send_mail和运行发送线程的时间之间,pdf是否有可能以某种方式发生变化?另外,仅供参考,还有一个名为django mailer的应用程序,它实现了一个(合理地)健壮的异步发送队列。如果msg.send第一次失败,它会处理类似于稍后重试的情况。根据您试图实现的目标,这可能是比使用这样的线程更好的方法。
  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)