我正在发送一封带有附件的电子邮件,该附件的文件名很长。为什么它会被新行破坏,系统的哪个部分应该知道这些新行应该被删除?在
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.utils import formatdate
msg = MIMEMultipart()
msg['Subject'] = 'subject'
msg['To'] = 'a@example.com'
msg['From'] = 'b@example.com'
msg['Date'] = formatdate(localtime=True)
msg.attach(MIMEText('abc'))
attachment_name = 'abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz.txt'
part = MIMEApplication("sometext", Name=attachment_name)
part['Content-Disposition'] = 'attachment; filename="%s"' % attachment_name
msg.attach(part)
print msg.as_string()
给我:
^{pr2}$
正如Leon的回答所解释的,Python正在实现RFCs中定义的折叠算法。在
在Python2中,可以使用
email.generator.Generator
实例来控制最大头长度;from the docs:(将maxheaderlen设置为零将防止在几乎所有情况下折叠长标题行)。在
在python3.5中,maxheaderlen参数在
email.message.Message.as_string
的signature中公开,因此print(msg.as_string(maxheaderlen=256))
是可能的。
maxheaderlen
默认为零,因此除非提供值,否则不会包装头行。在在Python3.6中,
maxheaderlen
在email.message.EmailMessage.as_string
的signature中公开(注意这是一个不同的类)。maxheaderlen
现在默认为None
:除非指定值,否则头行换行为78个字符。在长头字段的处理在section 2.2.3 of RFC 2822 "Internet Message Format"中定义。该部分在过时的RFC 5322中保持不变。在
相关问题 更多 >
编程相关推荐