2011-08-02 11 views
14

मैं एक संदेश और smtplib के निर्माण के लिए एक मेल का निर्माण संदेश भेजने के लिए पायथन मॉड्यूल MimeWriter का उपयोग कर रहा है:एन्कोडिंग मेल विषय गैर- ASCII वर्ण के साथ अजगर में (SMTP)

file msg.txt: 
----------------------- 
Content-Type: multipart/mixed; 
from: me<[email protected]> 
to: [email protected] 
subject: 主題 

Content-Type: text/plain;charset=utf-8 

主題 

मैं नीचे दिए गए कोड का उपयोग भेजने के लिए एक मेल:

import smtplib 
s=smtplib.SMTP('smtp.abc.com') 
toList = ['[email protected]'] 
f=open('msg.txt') #above msg in msg.txt file 
msg=f.read() 
f.close() 
s.sendmail('[email protected]',toList,msg) 

मैं, सही ढंग से मेल शरीर मिलता है लेकिन विषय उचित नहीं है

subject: some junk characters 

主題   <- body is correct. 

कृपया रों uggest? इस विषय के लिए उपयोग किए जाने वाले डीकोडिंग को निर्दिष्ट करने का कोई तरीका है, शरीर के लिए निर्दिष्ट होने के रूप में। विषय को सही तरीके से डीकोड कैसे किया जा सकता है?

+1

ओह चीनी वर्णों से सवाल – Rakesh

+0

पोस्टिंग के बाद यहाँ ठीक से प्रदर्शित कर रहे हैं संबंधित: [मैं पायथन का उपयोग करके ईमेल कैसे भेज सकता हूं?] (http://stackoverflow.com/q/9272257/4279) – jfs

उत्तर

23

http://docs.python.org/library/email.header.html

से
from email.message import Message 
from email.header import Header 
msg = Message() 
msg['Subject'] = Header('主題', 'utf-8') 
print msg.as_string() 

विषय: = UTF-8 ख 5Li76aGM =

अधिक सरल???????

from email.header import Header 
print Header('主題', 'utf-8').encode() 

= UTF-8 ख 5Li76aGM =

+1

यह स्वीकार्य उत्तर होना चाहिए। –

6

विषय एसएमटीपी हेडर के रूप में प्रेषित किया गया है, और उन्हें ASCII-केवल होना आवश्यक है। विषय में एन्कोडिंग का समर्थन करने के लिए आपको उस विषय को उपसर्ग करने की आवश्यकता है जिसके साथ आप एन्कोडिंग का उपयोग करना चाहते हैं। आपके मामले में, मैं इस विषय को उपसर्ग का सुझाव दूंगा? यूटीएफ -8? बी? जिसका अर्थ है UTF-8, Base64 एन्कोडेड।

दूसरे शब्दों में, मेरा मानना ​​है कि अपने विषय हैडर चाहिए और अधिक या इसके जैसे नहीं लग रहे:

// Convert subject to base64 
$subject_base64 = base64_encode($subject); 
fwrite($smtp, "Subject: =?UTF-8?B?{$subject_base64}?=\r\n"); 

अजगर में:

Subject: =?UTF-8?B?JiMyMDAyNzsmIzM4OTg4Ow=?= 

PHP में आप इस तरह से इसके बारे में जा सकते हैं

import base64 
subject_base64 = base64.encodestring(subject).strip() 
subject_line = "Subject: =?UTF-8?B?%s?=" % subject_base64 
+1

मैं इसे आजमाउंगा, इस बीच उपरोक्त प्रारूप में कनवर्ट करने के लिए कोई पायथन एपीआई है। यानी स्वचालित रूप से आवश्यक एन्कोडिंग – Rakesh

+1

के आधार पर वर्णों को जोड़ना मुझे यकीन नहीं है - मुझे बस उस हिस्से को याद आया जब से मैं कुछ समय पहले इस मुद्दे के साथ गड़बड़ कर रहा था। [यह उत्तर] (http://stackoverflow.com/questions/5910104/python-how-to-send-utf-8-e-mail#answer-5910530) ऐसा लगता है कि यह सही है यदि आप MIMEMultipart का उपयोग करते हैं MimeWriter के बजाय कक्षा। – AHM

+2

आपको यहां देखना चाहिए [अंतर्राष्ट्रीयकृत शीर्षलेख कैसे उत्पन्न करें] (http://docs.python.org/library/email.header.html) – mata