5

以下のコードを使用して、pdf 添付ファイル付きの電子メールを送信しています。しかし、「assertion no content」というエラーが表示されます。なぜそうなのかはわかりません。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()
4

1 に答える 1

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ます。

于 2012-12-06T04:24:31.263 に答える