Django

2012-12-05 12 views
5

में अनुलग्नक के साथ असीमित रूप से ईमेल भेजना मैं पीडीएफ अनुलग्नक के साथ ईमेल भेजने के लिए नीचे कोड का उपयोग कर रहा हूं। लेकिन, यह एक त्रुटि बह रहा है - "दावा कोई सामग्री नहीं"। मुझे यकीन नहीं है कि ऐसा क्यों है। मैं पीडीएफ के साथ सिंक्रनाइज़ेशन के साथ ईमेल भेजने में सक्षम हूं और साथ ही बिना पीडीएफ के ईमेल एसिंक भेज सकता हूं। (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 को कॉल करते हैं तो पीडीएफ और एचटीएमएल क्या हैं? (ये दो चीजें हैं जिन्हें 'assert content के साथ चेक किया गया है django.core.mail.message में कोई नहीं है।) क्या यह संभव है कि किसी भी तरह से pdf को send_mail को कॉल करने के दौरान बदल दिया जा रहा है और प्रेषण थ्रेड चलाने का समय ? – medmunds

+1

इसके अलावा, एफवाईआई, डीजेंगो-मेलर नामक एक ऐप है जो एक (तर्कसंगत) मजबूत एसिंक भेजता कतार लागू करता है। यह बाद में पुनः प्रयास करने जैसे मामलों को संभालता है अगर 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 का उपयोग करने का विचार दूसरा स्थान देता हूं।