2013-01-03 17 views
15

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

मैं \n द्वारा लाइन ब्रेक जोड़ता हूं और यह टेक्स्ट फ़ाइल के लिए काम करता है लेकिन ईमेल के लिए नहीं। क्या आप जानते हैं कि संभावित कारण क्या हो सकता है?


यहाँ मेरी कोड है:

import smtplib, sys 
import traceback 
def send_error(sender, recipient, headers, body): 

    SMTP_SERVER = 'smtp.gmail.com' 
    SMTP_PORT = 587 
    session = smtplib.SMTP('smtp.gmail.com', 587) 
    session.ehlo() 
    session.starttls() 
    session.ehlo 
    session.login(sender, 'my password') 
    send_it = session.sendmail(sender, recipient, headers + "\r\n\r\n" + body) 
    session.quit() 
    return send_it 


SMTP_SERVER = 'smtp.gmail.com' 
SMTP_PORT = 587 
sender = '[email protected]' 
recipient = '[email protected]yahoo.com' 
subject = 'report' 
body = "Dear Student, \n Please send your report\n Thank you for your attention" 
open('student.txt', 'w').write(body) 

headers = ["From: " + sender, 
       "Subject: " + subject, 
       "To: " + recipient, 
       "MIME-Version: 1.0", 
       "Content-Type: text/html"] 
headers = "\r\n".join(headers) 
send_error(sender, recipient, headers, body) 

उत्तर

12

आप अपने संदेश के मुख्य भाग HTML सामग्री ("Content-Type: text/html") के लिए घोषित की है। लाइन ब्रेक के लिए एचटीएमएल कोड <br> है। आपको या तो अपनी सामग्री प्रकार text/plain में बदलना चाहिए या सादे \n के बजाय लाइन ब्रेक के लिए HTML मार्कअप का उपयोग करना चाहिए क्योंकि HTML दस्तावेज़ को प्रस्तुत करते समय बाद में अनदेखा हो जाता है।


एक साइड नोट के रूप में, email package पर भी एक नज़र डालें। कुछ कक्षाएं हैं जो आपके लिए ई-मेल संदेशों की परिभाषा को सरल बना सकती हैं (with examples)।

उदाहरण के लिए आप की कोशिश कर सकते (untested):

import smtplib 
from email.mime.text import MIMEText 

# define content 
recipients = ["[email protected]"] 
sender = "[email protected]" 
subject = "report reminder" 
body = """ 
Dear Student, 
Please send your report 
Thank you for your attention 
""" 

# make up message 
msg = MIMEText(body) 
msg['Subject'] = subject 
msg['From'] = sender 
msg['To'] = ", ".join(recipients) 

# sending 
session = smtplib.SMTP('smtp.gmail.com', 587) 
session.starttls() 
session.login(sender, 'my password') 
send_it = session.sendmail(sender, recipients, msg.as_string()) 
session.quit() 
21
दुर्भाग्य से हम सब के लिए

, नहीं कार्यक्रम या आवेदन के हर प्रकार के एक ही मानकीकरण कि अजगर करता है उपयोग करता है।

अपने प्रश्न को देखते हुए मैं नोटिस आपके शीर्षक है: "Content-Type: text/html"

आप अपने नए-लाइनों के लिए HTML शैली टैग का उपयोग करने की जरूरत है जिसका मतलब है, इन लाइन टूट जाता है कहा जाता है। <br>

आपका पाठ होना चाहिए:

"Dear Student, <br> Please send your report<br> Thank you for your attention" 

आप बल्कि चरित्र प्रकार नई लाइनों का प्रयोग करेंगे, तो आप को पढ़ने के लिए शीर्ष लेख में परिवर्तन करना होगा: "Content-Type: text/plain"

तुम अब भी new- परिवर्तन होगा लाइनसे डबल \r\n पर लाइन वर्ण जो ईमेल में उपयोग किया जाता है।

आपका पाठ होगा:

"Dear Student, \r\n Please send your report\r\n Thank you for your attention" 
+0

आपको बहुत बहुत धन्यवाद। '\ r \ n' मेरे लिए काम नहीं करता है लेकिन'
'करता है। –

0

(अंत में \r\n के साथ) Content-Type: text/plain लिए सामग्री प्रकार हैडर स्थापना मुझे बहु लाइन सादे-पाठ ईमेल भेजने के लिए अनुमति दी।

0

आउटलुक सादे पाठ से लाइन फ़ीड्स को हटा देगा, जो मानते हैं कि अतिरिक्त हैं। https://support.microsoft.com/en-us/kb/287816

आप लाइनों को गोलियों की तरह दिखने के लिए अद्यतन से नीचे आज़मा सकते हैं। यह मेरे लिए काम किया।

body = "Dear Student, \n- Please send your report\n- Thank you for your attention" 
+0

नीचे वोट क्यों? – edW

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