我正在尝试编写一个python脚本来发送一个使用html格式的电子邮件,并涉及很多不间断的空格。但是,当我运行它时,一些& nbsp字符串被每171个字符出现的空格打断,如下例所示:
#!/usr/bin/env python
import smtplib
import socket
from email.mime.text import MIMEText
emails = ["my@email.com"]
sender = "test@{0}".format(socket.gethostname())
message = "<html><head></head><body>"
for i in range(20):
message += " " * 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()
该示例应该生成一个仅包含空格的空白电子邮件,但最终看起来像这样:
  ;
&nb sp;
& nbsp;
&nbs p;
&n bsp;
编辑:如果它很重要,我正在运行带有Postfix的Ubuntu 15.04用于smtp客户端,并使用python2.6。
答案 0 :(得分:5)
我可以用某种方式复制这个,但我的换行符每999个字符。 RFC 821表示一行的最大长度为1000个字符,包括换行符,这可能就是原因。
这篇文章提供了一种在python中发送html电子邮件的不同方式,我相信mime类型“multipart / alternative”是正确的方法。 Sending HTML email using Python
答案 1 :(得分:2)
我是yagmail的开发者,这是一个试图让您轻松发送电子邮件的软件包。
您可以使用以下代码:
import yagmail
yag = yagmail.SMTP('me@gmail.com', 'mypassword')
for i in range(20):
message += " " * 50
message += "<br/>"
yag.send(contents = message)
请注意,默认情况下,它会发送一条HTML消息,并且它还会自动添加非HTML浏览器的替代部分。
另外,请注意,省略subject
会留下一个空主题,如果没有to
参数,它会将其发送给自己。
此外,请注意,如果您正确设置了yagmail,则可以使用yag.SMTP()
登录,而无需使用用户名&amp;脚本中的密码(虽然仍然是安全的)。省略密码将提示getpass
。
添加附件就像指向本地文件一样简单,例如:
yag.send(contents = [message, 'previously a lot of whitespace', '/local/path/file.zip']
真棒不是吗?感谢您允许我为yagmail展示一个不错的用例:)
如果您有任何功能要求,问题或想法,请通过github告知我们。