Python smtplib 损坏 html 电子邮件

Posted

技术标签:

【中文标题】Python smtplib 损坏 html 电子邮件【英文标题】:Python smtplib corrupting html emails 【发布时间】:2011-10-04 03:27:09 【问题描述】:

我的应用程序生成带有用于报告的表格的 html 电子邮件。

s = smtplib.SMTP(self.server)    
s.sendmail(self.addrFrom(), self.addrTo(), message.getvalue())

当我在发送之前检查 message.getvalue() 时,html 是有效的。但是,当我在将源发送到 Outlook 时检查源时,它会显示为:

<TD>04/07/2011</TD><!
 TD>30/04/2011</TD>

代替:

<TD>04/07/2011</TD><TD>30/04/2011</TD>

有人对正在发生的事情有任何想法吗?

【问题讨论】:

在 python 发送 TCP/25 之后,您应该使用wireshark 嗅探它...很有可能在您的脚本上游发生损坏...尤其是在涉及 Outlook 的情况下。使用wireshark的Analyze -> Follow TCP Stream功能...你会得到一个TCP会话的ASCII转储 【参考方案1】:

您要发送什么内容类型的标头?请记住,标头必须在第三个参数中的消息正文之前发送邮件(从,到,邮件),每个标头都应该以 \r\n 结尾,并且在最后一个标头之后应该有一个最终的 \r\n,意思是 \ r\n\r\n 将最后一个标头与消息正文分开。

或者实际上,您可能应该使用 \n 而不是 \r\n,因为那里存在所有不合规的 MTA。

【讨论】:

【参考方案2】:

您应该使用email 包来生成正确的、MIME 编码的电子邮件正文。

您可能还想尝试我的 ezmail.py 模块,它可以为您完成大部分工作。

【讨论】:

【参考方案3】:

这不是 Outlook(或任何客户端)问题,而是符合 RFC 的服务器。

您必须纠正自己的例程或导入 textwrap。

有关详细信息,请参阅 RFC 5321:

4.5.3.1.6。文本行

一个文本行的最大总长度包括 1000 八位字节(不计算为透明度而重复的前导点)。 这个数字可以通过使用 SMTP 服务扩展来增加。

RFC 2821 表示相同。

【讨论】:

以上是关于Python smtplib 损坏 html 电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

python模块----yagmail模块smtplib模块 (电子邮件)

python学习笔记之电子邮件模块smtplib

python使用smtplib模块发送电子邮件

为什么发送电子邮件时不显示消息? - smtplib - Python

python使用电子邮件模块smtplib的方法(发送图片 附件)实用可行

使用 smtplib 的 Python 电子邮件:450,“此邮件被暂时拒绝”