2012-12-05 32 views
5

私は以下のコードを使用してpdf添付ファイルを電子メールで送信しています。しかし、それはエラーを叫んでいます - "アサーションなしのコンテンツ"。なぜそうなのか分かりません。私はpdfと同時に電子メールを送信するだけでなく、pdfなしで電子メールを非同期で送信することができます。 (Djangoの1.3を使用して) Djangoの添付ファイルと非同期で電子メールを送信

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() 
+0

send_mailを呼び出すと、pdfとhtmlは何ですか? (これらは、django.core.mail.messageの 'assert content is not None'でチェックされる2つのものです)send_mailを呼び出した時刻と送信スレッドが実行される時刻の間に何らかの形でpdfが変更される可能性はありますか? – medmunds

+1

また、FYIには、(合理的に)堅牢な非同期送信キューを実装するdjango-mailerというアプリがあります。 msg.sendが初めて失敗した場合、後で再試行するようなケースを処理します。あなたが達成しようとしているものによっては、このようなスレッドを使うよりも良いアプローチかもしれません。 – medmunds

答えて

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) 

はい、コンテンツがないファイルを添付しようとします。あなたは、添付するものがある場合にのみ添付することを確認する必要があります。とにかくポイントは何ですか?何かticket.pdfは空の文字列ですか?

また、私はdjango-mailerを使用しています。

関連する問題