Python邮件发送:如何正确添加含空格文件名的附件?
含空格文件名的邮件附件处理方案
问题根源在于Content-Disposition头中的文件名未正确处理空格——邮件客户端会将空格视为分隔符,导致文件名被截断;直接替换为%20不符合邮件头编码规范,会显示原始转义字符。
方法1:用双引号包裹文件名
修改prepare_attachment函数中的add_header语句,给文件名加上双引号,确保邮件客户端完整识别文件名:
p.add_header('Content-Disposition', 'attachment; filename="%s"' % filename)
方法2:使用标准邮件头编码(推荐)
借助email.utils模块的encode_header方法对文件名进行编码,兼容所有邮件客户端,还能处理非ASCII字符:
- 先导入模块:
from email.utils import encode_header
- 修改
prepare_attachment函数:
def prepare_attachment(filepath): import os # 确保导入os模块 filename = os.path.basename(filepath) attachment = open(filepath, "rb") p = MIMEBase('application', 'octet-stream') p.set_payload(attachment.read()) encoders.encode_base64(p) # 编码文件名,指定utf-8编码 encoded_filename = encode_header(filename, 'utf-8').decode() p.add_header('Content-Disposition', f'attachment; filename={encoded_filename}') return p
该方式会自动对空格等特殊字符编码,邮件客户端接收后会解码显示原始文件名,无截断或乱码问题。
内容的提问来源于stack exchange,提问作者ginjaemocoes
相关产品推荐
相关产品推荐

