Sto usando il seguente codice per inviare e-mail con allegato pdf. Ma è un errore - "asserzione senza contenuto". Non sono sicuro del perché sia così. Sono in grado di inviare l'e-mail con il pdf in modo sincrono così come inviare e-mail asincrona senza pdf. (Django 1,3)Invio di e-mail in modo asincrono con l'allegato in 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()
Cosa sono pdf e html quando si chiama send_mail? (Queste sono le due cose che vengono verificate con 'asserzione del contenuto non è None' in django.core.mail.message.) È possibile che in qualche modo il pdf venga modificato tra il momento in cui si chiama send_mail e il momento in cui viene eseguito il thread di invio ? – medmunds
Inoltre, FYI, c'è un'app chiamata django-mailer che implementa una coda di invio asincrona (ragionevolmente) robusta. Gestisce casi come riprovare più tardi se msg.send fallisce la prima volta. A seconda di cosa stai cercando di ottenere, potrebbe essere un approccio migliore rispetto all'utilizzo di thread come questo. – medmunds