You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python smtplib发信时M365域内收件人HTML附件损坏问题求助

问题原因

  • 核心原因是公司域下的M365 Exchange Online对域内传递的邮件有默认的安全扫描和内容净化规则:会自动识别附件内容类型,只要检测到是HTML文件,就会自动移除其判定为可疑的内容(包括嵌入式脚本、base64编码的内联资源、外部资源引用、可疑的CSS样式等),如果被移除的内容占比过高,就会导致HTML文件结构损坏、大小缩水,打开为空白页。
  • 发往外部收件人的邮件不会触发域内专属的内容净化策略,因此附件可以正常保留完整内容。
  • 修改MIME类型不生效的原因是Exchange不会仅通过MIME类型判定文件格式,会对附件二进制内容做实际的格式识别,只要解析出是HTML结构就会触发处理逻辑。

可行解决方案

  • 方案1:将HTML文件打包为ZIP/RAR等压缩格式后作为附件发送。压缩包不会被Exchange的HTML净化规则识别,可完整保留原文件内容,收件人解压后即可正常打开,改造成本最低。
  • 方案2:联系公司Exchange管理员,将发信账号/发信服务IP加入安全白名单,跳过对应邮件的HTML附件内容净化策略,适合企业内部固定业务场景长期使用。
  • 方案3:将业务报告从HTML格式转换为PDF格式后发送。PDF不会触发HTML专属的内容清理规则,且兼容性更好,适合需要直接预览附件的场景。
  • 方案4:如果必须发送原生HTML附件,可尝试显式指定附件的base64编码,代码修改参考:
import email.encoders
fsubtype = ftype.split('/')[1]
ftype = ftype.split('/')[0]
with open(file, mode='rb') as fh:
    content = fh.read()
    msg.add_attachment(content, maintype=ftype, subtype=fsubtype, filename=fname, encoder=email.encoders.encode_base64)

强制base64编码可以降低Exchange内容识别的概率,部分场景下可绕过轻量的内容扫描规则。

内容的提问来源于stack exchange,提问作者chrisxfire

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 06:06:03