我的Python脚本获取列表列表,并通过将内部列表的元素与",“连接起来,创建电子邮件正文的文本,并以如下的换行符追加这些元素:
for row in rows:
emailBody += ",".join(row) + "\n"(我知道我可以使用CSV模块做类似的事情,但我的目标是不使用它--至少目前是这样。)
然后,它通过以下方式发送电子邮件:
import smtplib
from email.mime.text import MIMEText
smtpServer = serverDNS
msg = MIMEText(emailBody, "plain")
msg['from'] = fromAddress
msg['to'] = ", ".join(recipients)
msg['subject'] = subject
smtp = smtplib.SMTP(smtpServer)
smtp.sendmail(msg['from'], recipients, msg.as_string())
smtp.quit()这很好,只是第一行上的换行符会被忽略,前两行结束于一行。其他每一行的换行符都很好。
如果我手动向第一行的最后一项添加一个新行,那么电子邮件在第一行之后有两个换行符,因此前两行之间有一个空行。
这里发生什么事情?我怎样才能让这一切像预期的那样表现呢?
请注意,第一行(第一个列表)由一组硬编码字符串组成。所以这是一个非常简单的列表。所有其他行都是动态生成的,但最后都是简单的字符串值(否则“join”会抱怨,对吧?)
如果我只是简单的print emailBody,它打印的很好。只有在将其转换为电子邮件时,第一行的换行符才会丢失。
我也尝试过使用"\r\n",而不是仅仅使用"\n"。同样的结果。
发布于 2017-05-15 05:02:06
这似乎是一个OUTLOOK“特性”(我称之为bug!),而不是我的Python代码的问题。不幸的是,我在工作中被Outlook困住了。但我发现,如果我把电子邮件发送到工作地址和我的私人地址,它会在我的私人邮件上显示得很好,但在我的工作邮件中却是错误的!
然后我注意到,在Outlook中,邮件顶部有一行灰色的小文本,上面写着“删除了邮件中的额外行间隔”。点击这一行恢复行中断,然后电子邮件将正确显示!
知道Outlook为什么这么做吗?你知道为什么它会在某些行而不是其他行上这样做,以及我如何编码我的Python来发送无法使Outlook“修复”它们的电子邮件呢?
Outlook修补程序:
不幸的是,我不能为所有可能收到这些电子邮件的人这样做。但是,我确实在Outlook中找到了“删除纯文本消息中的额外断行”的首选,因此我关闭了它,这至少解决了Outlook客户端中的问题。
如果我想不出如何格式化这些电子邮件的话,我将不得不把它传达给所有其他收件人,这样Outlook就不会试图“修复”它们。
https://stackoverflow.com/questions/43971472
复制相似问题