如何修改Python email.mime模块的默认换行符?
解决MIMEText默认换行符改为\r\n的问题
没问题!要把MIMEText生成的内容里的换行符从\n改成\r\n适配HTTP请求,其实用Python email模块自带的policy功能就能轻松搞定,具体做法如下:
核心思路
Python的email模块通过**策略(Policy)**来控制邮件内容的格式细节,默认的Compat32策略使用\n作为行结束符,我们只需要自定义一个策略,指定行结束符为HTTP要求的\r\n(CRLF)即可。
完整实现代码
from email.mime.text import MIMEText from email.policy import EmailPolicy # 定义适配HTTP的策略,指定行结束符为\r\n http_policy = EmailPolicy(line_terminator='\r\n') a = MIMEText('hello') a['From'] = 'stack' # 使用自定义策略生成符合HTTP要求的字节内容 result = a.as_bytes(policy=http_policy) print(result)
执行结果
运行后会输出符合HTTP规范的字节内容:
b'Content-Type: text/plain; charset="us-ascii"\r\nMIME-Version: 1.0\r\nContent-Transfer-Encoding: 7bit\r\nFrom: stack\r\n\r\nhello'
为什么不直接用字符串替换?
可能有人会想到直接用replace(b'\n', b'\r\n')来替换换行,但这种方式存在风险:它会把邮件内容里的\n也一并替换,而我们只需要修改邮件头部的分隔符。使用policy的方式会正确区分头部和内容的换行规则,是更安全、规范的做法。
内容的提问来源于stack exchange,提问作者Eric Stdlib
相关产品推荐
相关产品推荐

