Używam poniższego kodu do wysyłania wiadomości e-mail z załącznikiem pdf. Ale to zarzuca błąd - "stwierdzenie braku treści". Nie jestem pewien, dlaczego tak jest. Jestem w stanie wysłać wiadomość e-mail z pdf synchronicznie, a także wysłać e-mail async bez pdf. (przy użyciu Django 1.3)Wysyłanie wiadomości e-mail asynchronicznie z załącznikiem w 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()
Co to są pdf i html podczas połączenia z send_mail? (Są to dwie rzeczy, które są sprawdzane za pomocą 'assert content is not None' w django.core.mail.message.) Czy jest możliwe, że jakoś pdf zmienia się pomiędzy czasem wywołania send_mail a czasem uruchomienia wątku wysyłania ? – medmunds
Ponadto, FYI, istnieje aplikacja o nazwie django-mailer, która implementuje (rozsądnie) solidną asynchroniczną kolejkę wysyłania. Obsługuje takie przypadki jak ponawianie próby później, jeśli msg.send nie powiedzie się za pierwszym razem. W zależności od tego, co próbujesz osiągnąć, może to być lepsze podejście niż używanie takich wątków. – medmunds