【问题标题】:Python mail inserts space every 171 charactersPython 邮件每 171 个字符插入一个空格
【发布时间】:2023-03-10 21:23:02
【问题描述】:

我正在尝试编写一个 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 += "&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


    【解决方案1】:

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

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

    【讨论】:

    • 这就是问题所在,因此只需在每个
      之后添加一个 \n 即可让此问题消失。
    • 但是 \n 出现在电子邮件中(至少在 Outlook 中呈现)。如何插入换行符而不被收件人视为\n?
    【解决方案2】:

    我是yagmail 的开发者,这是一个试图让发送电子邮件变得容易的软件包。

    您可以使用以下代码:

    import yagmail
    yag = yagmail.SMTP('me@gmail.com', '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 告诉我。

    【讨论】:

    • 这个包看起来很棒,但不幸的是我无法为我的脚本引入任何外部依赖项。还是谢谢。
    • @Programman 太糟糕了。我希望你有机会使用它:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    • 2020-03-04
    • 2014-11-09
    • 1970-01-01
    • 2011-02-09
    相关资源
    最近更新 更多