2014-09-04 6 views
5

में अनगिनत स्थान डालता है मैंने एक साधारण पायथन स्क्रिप्ट लिखी है जो प्राप्तकर्ताओं की एक सरणी को मेल भेजने के लिए MIMEMultipart और SMTPLib का उपयोग करती है। कोड इस तरह दिखता है:पायथन मेल Outlook विषय पंक्ति

import smtplib 
import sys 

from email.mime.text import MIMEText 
from email.mime.multipart import MIMEMultipart 

sender='[email protected]' 
recipients='[email protected]' 
subject='A pretty long subject line which looks like this' 
mail_server='microsfot_exchange_server_ip' 
msg = MIMEMultipart('alternative') 
body='Body of the Email' 
msg['Subject'] = subject 
msg['from'] = sender 
msg['to'] = ", ".join(recipients) 
s = smtplib.SMTP(mail_server) 
s.sendmail(sender, recipients, msg.as_string()) 
s.quit() 

यह सफलतापूर्वक एक मेल भेजता है, लेकिन आउटलुक मेल क्लाइंट में जैसे विषय इस तरह दिखता है:

A pretty long subject line which looks  like this 
+0

यह उपयोगी होगा यदि आप पाइथन द्वारा बनाए गए संदेश के प्रासंगिक शीर्षलेख ('msg.as_string()' के आउटपुट और क्लाइंट (आउटलुक) द्वारा प्राप्त ई-मेल के शामिल हो सकते हैं। –

+0

इसके अलावा: आप किस पायथन संस्करण का उपयोग कर रहे हैं? –

+0

यहाँ क्या यह हेडर में की तरह लग रहा है: 'विषय: एक बहुत लंबा विषय पंक्ति जो \t this' मैं अजगर 2.7 का उपयोग कर रहा तरह लग रहा है – screwgoth

उत्तर

6

ऐसा लगता है कि आपने Issue #1974:

लंबे ई-मेल शीर्षलेखों को लपेटा जाना चाहिए। इस प्रक्रिया को "हेडर फोल्डिंग" कहा जाता है और RFC822 में वर्णित है। हालांकि, आरएफसी 822 थोड़ा हद तक प्रतीत होता है कि हेडर फोल्डिंग कैसे होनी चाहिए।

अजगर पहले की तुलना में 2.7/3.1 एक तरीका है कि जारी किए गए कारण आप कुछ मेल क्लाइंट (निरंतरता चरित्र के रूप में टैब \t का प्रयोग करके) के साथ वर्णित में यह करने के लिए हुआ संस्करणों में। अपने विषय पंक्ति हेडर इस तरह वस्तु बनाओ::

बग रिपोर्ट में एक workaround सुझाव दिया हुआ है

from email.header import Header 

# ... 

msg['Subject'] = Header(subject) 

मैं सिर्फ यह सत्यापित, और यह वास्तव में निरंतरता पात्रों के रूप में टैब के बजाय रिक्त स्थान का उपयोग करता है, जो आपकी समस्या को हल करना चाहिए।

+2

+1। इसके अलावा: आरएफसी 2822 (जो आरएफसी 822 का अधिग्रहण करता है) हेडर फोल्डिंग का वर्णन करता है और अनजाने में प्रकट होता है। –

+0

बहुत बहुत धन्यवाद @ लुकास-ग्राफ। 'हेडर' ने मेरी समस्या हल की – screwgoth

+0

एक और संभावित कामकाज आरएफसी 2047-हेडर एन्कोडिंग होगा। – tripleee

2

आपका विषय पंक्ति है से अधिक समय 78 वर्ण, और .as_string() द्वारा तोड़ दिया जा रहा है। पहले कुछ वर्ण विषय पंक्ति पर हैं, और शेष वर्ण एक या कई निरंतरता रेखाओं पर हैं।

जब Outlook मूल विषय पंक्ति का पुनर्निर्माण करता है, तो यह गलत तरीके से करता है।

तुम इतनी तरह, निरंतरता लाइनों से बचने के लिए इस से बचने की कोशिश कर सकते हैं:

from StringIO import StringIO 
from email.generator import Generator 
def my_as_string(msg): 
    fp = StringIO() 
    g = Generator(fp, mangle_from_=False, maxheaderlen=0) 
    g.flatten(msg) 
    return fp.getvalue() 

... 

s.sendmail(sender, recipients, my_as_string(msg)) 

संदर्भ:

+0

screwgoth: मैं इसे भावी पीढ़ी के लिए मूल्यवान मामले में मेरा उत्तर छोड़ देंगे । लेकिन, आपको लुकास का जवाब पसंद करना चाहिए। –

+0

हाँ। आपका समाधान शायद काम भी करेगा। लेकिन मुझे लगता है कि यह थोड़ा दौर है। हालांकि मुझे 'जेनरेटर' कक्षा में पेश करने की सराहना करते हैं। – screwgoth

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