【问题标题】:Python sendmail, errorPython发送邮件,错误
【发布时间】:2018-05-31 15:11:48
【问题描述】:

当我使用 python sendmail.987654322@从 unix 服务器发送邮件时,我收到了如下所示的附加内容。

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"] = "sender@mail.com"
   msg["To"] = "mymailid@mail.com"
   msg["Subject"] = "python mail"

   msg.attach(content)

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

【问题讨论】:

  • 我只是想避免这种情况,警告。我的文件内容是一个 html 数据,但是当我收到邮件时,我在邮件上方看到了这个警告。我想禁用它。
  • 我怀疑您还需要将data 明确标识为“html”。 data = MIMEText(whatever, "html").

标签: python windows unix sendmail


【解决方案1】:

您将电子邮件内容分为两部分,data 和 content。您需要明确确认两者都是 HTML。所以改变

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

到

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

【讨论】:

  • 谢谢,实际上我的错误是,我在数据中添加了多个 HTML 标题,步骤:content = MIMEText("&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;&lt;title&gt;&lt;/title&gt;&lt;/head&gt;&lt;body&gt;"+'%s'%data+"&lt;/body&gt;&lt;/html&gt;", "html") 不是必需的,只需将文件内容读取为 HTML 即可。
【解决方案2】:

您应该查看消息字符串。您看到的消息不是警告,它只是您在消息中写入的内容:

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; ...,因为当您想将其包含到 HTML 页面的正文中时,它已由第一行 MIMEText 添加。

你真正想要的可能是:

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

但我也认为你不需要用MIMEMultipart("alternative") 将它包含到另一个级别:msg = content 可能就足够了。

最后,当标准库中的 smtplib 模块已经知道如何发送消息时,我不认为明确地启动一个新进程来执行 sendmail 真的是大材小用:

import smtplib

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

【讨论】:

  • 谢谢,实际上我的错误是,我在数据中添加了多个 HTML 标头,步骤:content = MIMEText("&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;&lt;title&gt;&lt;/title&gt;&lt;/head&gt;&lt;body&gt;"+'%s'%data+"&lt;/body&gt;&lt;/html&gt;", "html") 不是必需的,只需将文件内容读取为 HTML 即可。
猜你喜欢
  • 1970-01-01
  • 2013-11-05
  • 2012-07-08
  • 2010-10-18
  • 2014-09-04
  • 1970-01-01
  • 2013-03-02
  • 2013-01-07
  • 1970-01-01
相关资源
最近更新 更多