Python邮件每171个字符插入一个空格

问题描述 投票:7回答:2

我正在尝试编写python脚本来发送使用html格式的电子邮件,其中涉及很多不间断的空格。但是,当我运行它时,某些&nbsp字符串会被每171个字符出现的空格中断,如下面的示例所示:

#!/usr/bin/env python
import smtplib
import socket
from email.mime.text import MIMEText

emails = ["[email protected]"]
sender = "test@{0}".format(socket.gethostname())

message = "<html><head></head><body>"
for i in range(20):
        message += "&nbsp;" * 50
        message += "<br/>"
message += "</body>"
message = MIMEText(message, "html")
message["Subject"] = "Test"
message["From"] = sender
message["To"] = ", ".join(emails)
mailer = smtplib.SMTP("localhost")
mailer.sendmail(sender, emails, message.as_string())
mailer.quit()

该示例应生成仅包含空格的空白电子邮件,但最终看起来像这样:

         &nbsp ;                                    


                       &nb sp;                      


                                     & nbsp;        






             &nbs p;                                


                           &n bsp;          

编辑:如果很重要,我正在为smtp客户端运行带有Postfix的Ubuntu 15.04,并使用python2.6。

python email whitespace
2个回答
5
投票

我可以用某种方式复制它,但是我的换行符是每999个字符。 RFC 821说一行的最大长度为1000个字符(包括换行符),这可能就是原因。

这篇文章提供了一种不同的方式来发送python中的html电子邮件,我相信mime类型“ multipart / alternative”是正确的方式。Sending HTML email using Python


2
投票

我是yagmail的开发人员,该软件包试图使发送电子邮件变得容易。

您可以使用以下代码:

import yagmail
yag = yagmail.SMTP('[email protected]', 'mypassword')

for i in range(20):
    message += "&nbsp;" * 50
    message += "<br/>"

yag.send(contents = message)

请注意,默认情况下,它将发送HTML消息,并且还会自动为非HTML浏览器添加替代部分。

[另外,请注意,省略subject会留下一个空的主题,而没有to参数则会将其发送给self。

此外,请注意,如果您正确设置了yagmail,则只需使用yag.SMTP()登录,而无需在脚本中输入用户名和密码(同时仍然安全)。忽略密码将提示getpass

添加附件就像指向本地文件一样简单,例如:

yag.send(contents = [message, 'previously a lot of whitespace', '/local/path/file.zip']

很棒吗?感谢您允许我展示yagmail的一个很好的用例:)

如果您有任何功能要求,问题或想法,请通过github告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.