2017-12-18 392 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:如果你不再需要这个问题的帮助,如果答案有帮助,你应该接受一个。 –