2017-12-18 390 views
0

當我使用python從unix服務器發送郵件時,我收到了額外的內容,如下所示sendmail.此內容顯示在郵件中。Python發送郵件,錯誤

From nobody Mon Dec 18 09:36:01 2017 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit 

我的代碼如下。

#reading data from file 
    data = MIMEText(file('%s'%file_name).read()) 
    #writing the content as html 
    content = MIMEText("<!DOCTYPE html><html><head><title></title></head><body>"+'%s'%data+"</body></html>", "html") 
    msg = MIMEMultipart("alternative") 

    msg["From"] = "[email protected]" 
    msg["To"] = "[email protected]" 
    msg["Subject"] = "python mail" 

    msg.attach(content) 

    p = Popen(["/usr/sbin/sendmail", "-t","-oi"], stdin=PIPE,universal_newlines=True) 
    p.communicate(msg.as_string()) 
+0

你是說你不期待「text/plain」內容以及html內容? – snakecharmerb

+0

我只是想避免這種情況,警告。我的文件內容是一個html數據,但是當我收到郵件時,我在消息上方看到這個警告。我想禁用它。 –

+0

我懷疑你還需要明確標識數據爲「html」。 'data = MIMEText(無論,「html」)'。 –

回答

2

您正在構建的電子郵件的內容分爲兩個部分,如datacontent。您需要明確確認兩者都是HTML。因此,改變

data = MIMEText(file('%s'%file_name).read()) 

data = MIMEText(file('%s'%file_name).read(), "html") 
+0

謝謝,其實我的錯誤是,我已經添加到多個HTML標頭的數據,步驟: '含量= MimeText用於( 「<!DOCTYPE HTML> 」+ '%s' 的%數據+「」, 「HTML」)' 是沒有必要的,只是讀取文件作爲HTML的內容很好。 –

1

你應該看看消息字符串。你看到的消息不是警告,這正是已writen到消息:

data = MIMEText(file('%s'%file_name).read()) 
content = MIMEText("<!DOCTYPE html><html><head><title></title></head><body>" 
    +'%s'%data+"</body></html>", "html") 

data.as_string()實際上包含Content-Type: text/plain; ...,因爲它已經由第一MIMEText線,當你想包括加入它進入HTML頁面的主體。

你真正想要的可能是:

data = file(file_name).read() 
content = MIMEText("<!DOCTYPE html><html><head><title></title></head><body>" 
    +'%s'%data+"</body></html>", "html") 

但我也認爲你不需要它包括與一個MIMEMultipart("alternative")另一個層面:msg = content可能是不夠的。

最後,我不認爲這明確地開始一個新的進程來執行的sendmail是真的矯枉過正,當從標準庫aloready的smtplib模塊知道如何發送消息:

import smtplib 

server = smtplib.SMTP() 
server.send_message(msg) 
server.quit() 
+0

謝謝,其實我的錯誤是,我已經添加到多個HTML標題的數據,步驟: 'content = MIMEText(「<!DOCTYPE HTML> 「+ '%s' 的%數據+」」, 「HTML」)' 是沒有必要的,只是讀取文件內容爲HTML是好的 –

+1

@arun:如果你不再需要這個問題的幫助,如果答案有幫助,你應該接受一個。 –