【发布时间】:2014-08-21 14:43:01
【问题描述】:
我正在使用元素上的 elementtree.ElementTree.dump 生成 html 文件。这些文件在所有浏览器中看起来都不错,并且文件中的底层代码看起来也很好(没有未闭合的括号或任何东西)。
当我通过 smtplib 向 Outlook 2010 发送电子邮件时,我看到了奇怪的格式问题。这些问题将是 100% 可重复的,因此问题是合乎逻辑的。这是一个例子:
<table b="" order="1">
这是来自我自己发送的 HTML 电子邮件的源代码。正确写为:
<table border="1">
在原始源代码中。
如果我在 Outlook 中使用原始 HTML 作为源编写 HTML 电子邮件,它的格式正确。 (新的电子邮件附件 html 文件->插入为文本)
是 Outlook 还是 Python 的问题?我用来读取html文件并发送的函数如下。
def email_Report(mailOptions):
reportName = time.strftime("%Y%m%d.%H%M") + ".html"
ElementTree(mailOptions['report']).write("/home/%s/%s" %(mailOptions['username'],reportName))
#Set sender and receiver to the user building the report.
mailaddr = '%s@acme.com' %(mailOptions['username'])
#Access the report file. Added binary in case we ever use code on Windows
filename = "/home/%s/%s" % (mailOptions['username'], reportName)
open_file = open(filename, 'rb')
emsg = MIMEText(open_file.read(), 'html')
open_file.close()
emsg['Subject'] = "Report for %s generated by %s %s" % (mailOptions['zone'], mailOptions['username'], time.strftime("%d%m%Y-%H%M"))
emsg['To'] = mailaddr
emsg['From'] = mailaddr
#Hostname can be a parameter to SMTP method if localhost isn't listening
sc = smtplib.SMTP()
sc.connect()
sc.sendmail(mailaddr, mailaddr, emsg.as_string())
sc.close()
return
HTML 非常简单。没有 CSS,没有标题或头部标签等。只是 html->body->table->tr->th->(newrow)->td->td 等。我是否可以忽略编码/转义之类的东西?我必须使用mime multipart吗?我使用的是 Python 2.4.3,无法使用任何没有库存的模块。
【问题讨论】:
-
为了进一步比较,我在读入后对具有 MIMEText 的变量使用了“print()”语句。然后,我将生成的 HTML 与 Outlook 中显示的源进行了比较。我重新生成了代码,但仍然有不同的问题。表格的未对齐部分有这样一行:
&lt;td&gt;mytext</td>出现在 print() 和 repr() 的变量中的 html:<td>mytext</td> -
对于未来的读者来说,它与 elementtree 绑定的原因是 elementtree.ELementTree.dump() 会输出一行 xml。在这种情况下,我的线路是 26k 长。
标签: python outlook-2010 smtplib