2012-04-11 15 views
7

पर इनलाइन छवियों को प्रदर्शित करना मैं इनलाइन छवियों के साथ Django में एक ईमेल बनाने की कोशिश कर रहा हूं।आईफोन, आईपैड

msg = EmailMultiAlternatives(...) 
image_file = open('file_path', 'rb') 
img = MIMEImage(img_data) 
image_file.close() 
img.add_header('Content-ID', '<image1>') 
img.add_header('Content-Disposition', 'inline') 
msg.attach(img) 
msg.send() 

और टेम्पलेट में मैं यह इतना तरह का संदर्भ होगा:

<img src="cid:image1" /> 

यह वेब ब्राउज़र, आउटलुक, थंडरबर्ड में ठीक काम करता है ... सब पर OSX, iPad और सेब मेल क्लाइंट के अलावा आई - फ़ोन। छवियों को दो बार प्रदर्शित किया जाता है। उन्हें इनलाइन सही ढंग से रखा गया है लेकिन वे ईमेल के नीचे से भी जुड़े हुए हैं। मेरा सवाल है, मैं नीचे की छवियों से कैसे छुटकारा पा सकता हूं? या मैं अलग-अलग ईमेल में छवियों से संपर्क करना चाहिए।

संदर्भ:
http://djangosnippets.org/snippets/1507/
Django: How to send HTML emails with embedded images
creating a MIME email template with images to send with python/django

+0

लोग इसे में अधिक रुचि पाते हैं और भूल जाते हैं अब के लिए "Django ईमेल का उपयोग करके बनाए" के लिए पूछने के लिए। – hynekcer

+0

सलाह के लिए धन्यवाद – SunnySydeUp

+0

छवियों को संलग्न करना (जहां तक ​​मुझे पता है) उन्हें डिफ़ॉल्ट रूप से दिखाने का प्रयास है - यानी "[email protected] से सभी छवियां दिखाएं" को सक्षम किए बिना विकल्प वैकल्पिक रूप से उपयोग करना है आपके सर्वर पर होस्ट की गई छवि के लिए यूआरएल। छवि केवल एक बार दिखाई देगी, लेकिन इसे उपयोगकर्ता –

उत्तर

10

अलग ईमेल क्लाइंट अलग अलग तरीकों से multipart/mixed संदेशों रेंडर करने के लिए चुनें।

अधिकतर ग्राहक प्रत्येक भाग ("मल्टीपार्ट" संदेश में) इनलाइन में प्रस्तुत करने का विकल्प चुनते हैं - क्रम में वे ईमेल में जोड़े गए थे। हालांकि, यदि किसी छवि को text/html भाग में संदर्भित किया गया है, तो अधिकांश ग्राहक उस छवि को बाद में "सभी भागों को रेखांकित करने" प्रक्रिया के हिस्से के रूप में पर प्रदर्शित नहीं करते हैं।

पर OSX और आईओएस एप्पल मेल, अब तक के रूप में वे होगा क्रम में एक multipart/mixed संदेश में प्रत्येक भाग प्रदर्शन वे शामिल थे में, अलग-अलग हैं HTML और छवियों के बीच किसी भी आंतरिक संदर्भ की परवाह किए बिना। इसके परिणामस्वरूप आपकी छवियों को आपके HTML में एक बार प्रदर्शित किया जा रहा है, और फिर संदेश के अंत में जहां उन्हें स्वचालित रूप से रेखांकित किया गया है।

समाधान आपकी HTML और छवि संपत्तियों को एक related भाग में समूहित करना है। यानी .:

from django.core.mail import EmailMultiAlternatives 
from email.mime.image import MIMEImage 
from email.mime.multipart import MIMEMultipart 
from email.mime.text import MIMEText 

# HTML + image container 
related = MIMEMultipart("related") 

# Add the HTML 
html = MIMEText('an image: <img src="cid:some_image"/>', "html") 
related.attach(html) 

# Add an image 
with open("icon.png", "rb") as handle: 
    image = MIMEImage(handle.read()) 
image.add_header("Content-ID", "<some_image>") 
image.add_header("Content-Disposition", "inline") 
related.attach(image) 

# top level container, defines plain text version 
email = EmailMultiAlternatives(subject="demo", body="plain text body", 
           from_email="[email protected]", 
           to=["[email protected]"]) 
# add the HTML version 
email.attach(related) 

# Indicate that only one of the two types (text vs html) should be rendered 
email.mixed_subtype = "alternative" 
email.send() 
"ईमेल" या "सेब के ईमेल" जैसे अधिक विशिष्ट टैग के लिए अपने प्रश्न को फिर से टैग
+0

से कार्रवाई की आवश्यकता हो सकती है क्या यह "छवियां दिखाएं" दबाए बिना जीमेल में ईमेल दिखाता है? – nelsonvarela

+0

@iAmTheOne और केवल मैंने इसका परीक्षण नहीं किया है, लेकिन मुझे शक है। यहां तक ​​कि अगर ऐसा होता है, तो यह जीमेल में एक बग है और आपको उन्हें ठीक करने की उम्मीद करनी चाहिए, इसलिए इस पर भरोसा न करें। –

+0

कोई विचार है कि यह रूबी के साथ कैसे किया जा सकता है? ActionMailer? – mirage

संबंधित मुद्दे