2013-01-03 204 views
15

我寫了一個腳本,它將一條消息寫入一個文本文件,並將其作爲電子郵件發送。 一切順利,除了電子郵件終於看起來都在一行。如何在使用Python的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]' 
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")。換行符的HTML代碼是<br>。您應該將內容類型更改爲text/plain,或將HTML標記用於換行而不是簡單的\n,因爲在呈現HTML文檔時後者會被忽略。


作爲一個附註,還可以看看email package。有一些類可以簡化電子郵件的定義(with examples)。

例如,你可以嘗試(未經測試):

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

不幸的是,我們所有的,不是每個類型的程序或應用程序中使用相同的標準化,從而Python做。

看你的問題,我注意到您的標題是:"Content-Type: text/html"

這意味着你需要使用HTML風格標記爲新線,這些被稱爲行分解。 <br>

你的文字應該是:

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

如果您願意使用字符類型的新行,你必須改變標題改爲:"Content-Type: text/plain"

你仍然必須改變新 - 從單一的\n到在電子郵件中使用的雙重\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頭設置爲Content-Type: text/plain讓我送多行純文本電子郵件。

0

Outlook將刪除它認爲是額外的純文本的換行。 https://support.microsoft.com/en-us/kb/287816

你可以嘗試下面的更新,使行看起來像子彈。這對我有效。

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

爲什麼選擇投票? – edW

相關問題