Python邮件在Outlook主题行中添加了未计算的空格
我写了一个简单的Python脚本,使用了MIMEMultipart和SMTPLib来给一组收件人发送邮件。代码大概是这样的:
import smtplib
import sys
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
sender='foo@bar.com'
recipients='someguy@bar.com'
subject='A pretty long subject line which looks like this'
mail_server='microsfot_exchange_server_ip'
msg = MIMEMultipart('alternative')
body='Body of the Email'
msg['Subject'] = subject
msg['from'] = sender
msg['to'] = ", ".join(recipients)
s = smtplib.SMTP(mail_server)
s.sendmail(sender, recipients, msg.as_string())
s.quit()
这个代码可以成功发送邮件,但在像Outlook这样的邮件客户端中,邮件的主题看起来是这样的:
A pretty long subject line which looks like this
2 个回答
2
你的邮件主题行超过了78个字符,因此被 .as_string()
分成了几部分。前面的一些字符在主题行上,剩下的字符则在一个或多个续行上。
当Outlook试图把原来的主题行重新组合时,它的做法是不正确的。
你可以通过避免续行来解决这个问题,像这样:
from StringIO import StringIO
from email.generator import Generator
def my_as_string(msg):
fp = StringIO()
g = Generator(fp, mangle_from_=False, maxheaderlen=0)
g.flatten(msg)
return fp.getvalue()
...
s.sendmail(sender, recipients, my_as_string(msg))
参考资料: