Tôi đang sử dụng mã bên dưới để gửi email có tệp đính kèm pdf. Nhưng, đó là một lỗi - "khẳng định không có nội dung". Tôi không chắc tại sao nó lại như vậy. Tôi có thể gửi email với pdf đồng bộ cũng như gửi email không đồng bộ với pdf. (Sử dụng Django 1,3)Gửi email không đồng bộ với tệp đính kèm trong 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()
pdf và html khi bạn gọi send_mail là gì? (Đây là hai thứ được kiểm tra với nội dung 'assert không phải là None' trong django.core.mail.message.) Có thể nào đó bằng cách nào đó pdf bị thay đổi giữa thời gian bạn gọi send_mail và thời gian mà chuỗi gửi được chạy ? – medmunds
Ngoài ra, FYI, có một ứng dụng gọi là django-mailer thực hiện một hàng đợi gửi async (hợp lý) mạnh mẽ. Nó xử lý các trường hợp như thử lại sau nếu msg.send không thành công trong lần đầu tiên. Tùy thuộc vào những gì bạn đang cố gắng đạt được, nó có thể là một cách tiếp cận tốt hơn so với sử dụng các chủ đề như thế này. – medmunds