【问题标题】:Python smtplib corrupting html emailsPython smtplib 损坏 html 电子邮件
【发布时间】: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转储

标签: python email outlook smtp


【解决方案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 表示相同。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-28
        • 2021-04-26
        • 2015-02-28
        • 1970-01-01
        • 2011-02-12
        • 2017-06-27
        • 2016-12-06
        • 2017-06-16
        相关资源
        最近更新 更多