讲师中心 微信公众号
AI工具推荐 视频效率加速

XML文件如何通过Email发送 自动发送XML附件的脚本

胖瑶吖_4470

胖瑶吖_4470

发布时间:2026-03-02 11:31:02

|

277人浏览过

|

来源于php中文网

原创

发送XML附件必须作为二进制处理,用MIMEApplication设Content-Type=application/xml并声明charset=utf-8;mutt需-e指定content_type;PowerShell须手动设ContentType.MediaType;XML文件需确保编码声明一致、无多余字符、权限正确。

xml文件如何通过email发送 自动发送xml附件的脚本

Python 用 smtplib 和 MIMEApplication 发 XML 附件

直接发 XML 文件,核心是别把它当纯文本塞进邮件正文——必须作为二进制附件处理,否则换行、编码、特殊字符全乱。用 MIMEApplication(不是 MIMEText)包装,Content-Type 设为 application/xml,并显式指定 charset=utf-8(即使文件本身是 UTF-8,不声明的话 Outlook 等客户端常默认 GBK 解析)。

常见错误现象:UnicodeEncodeError(读文件时没指定 encoding)、XML 内容出现在正文中而非附件里(误用 MIMEText)、收件方双击打不开(缺 charset 或后缀没设对)。

  • 读文件务必加 encoding='utf-8':用 open('data.xml', 'rb') 读二进制更稳妥,避免隐式解码
  • add_header('Content-Disposition', 'attachment', filename='report.xml') 中的 filename 必须带 .xml 后缀,否则某些邮箱会丢扩展名
  • 如果 XML 里有中文且未声明 ,发出去后可能显示为乱码——发前检查文件头,或用 lxml.etree.tostring(..., encoding='utf-8', xml_declaration=True) 重写输出

Shell 脚本调用 mutt 发送 XML 附件

mutt 是 Linux 下最轻量可靠的命令行邮件工具,比 mail 对附件支持更稳。关键点在于:不能只靠 -a 参数,必须配合 -e 设置 MIME 类型,否则 XML 被识别成 text/plain,Gmail 会拒收或转成正文。

使用场景:定时任务(cron)跑完数据导出 XML 后自动通知运维。

AI舌诊面诊问诊医疗系统+诊疗商城系统源码
AI舌诊面诊问诊医疗系统+诊疗商城系统源码

AI 舌诊面诊问诊医疗系统 + 诊疗商城系统源码是一套结合 AI 辅助诊断与商品转化的健康类程序,基于浩创云、ThinkPHP(PHP)开发,支持微信服务号与 H5 端,适合做中医舌诊面诊问答、健康建议推送以及配套诊疗商品的运营。

下载
  • 命令必须包含:mutt -e "set content_type='application/xml'" -a report.xml -- recipient@example.com < body.txt
  • report.xml 路径必须是绝对路径,cron 环境下 cd 不生效,相对路径大概率失败
  • 若 XML 文件含非 ASCII 字符,mutt 默认用系统 locale 编码,建议在 cron 中显式设置:LANG=en_US.UTF-8 mutt ...

Windows 上用 PowerShell 的 Send-MailMessage 发 XML 附件

PowerShell 自带的 Send-MailMessage 对附件类型判断很弱,默认把 XML 当文本,容易触发反垃圾策略被拦截。必须用 -Encoding 强制指定,并手动构造 MIME 头——但该命令不支持自定义 Content-Type,所以得绕道:先用 [System.Net.Mail.Attachment] 创建附件对象,再设 ContentType.MediaType。

性能影响:每次调用都会启动 .NET 邮件栈,小文件无感,但若单次发几十个 XML,建议改用 System.Net.SmtpClient 手动复用连接。

  • 别用 -Attachments 'data.xml' 简写,必须用完整对象:$att = New-Object Net.Mail.Attachment('data.xml'); $att.ContentType.MediaType = 'application/xml'
  • PowerShell 5.1 及以下版本不支持 UTF-8 BOM 自动识别,XML 文件若带 BOM,需用 [IO.File]::ReadAllBytes() 读取后传入,否则附件内容开头多出乱码
  • Gmail 对来自 PowerShell 的邮件较敏感,建议在 -From 中用公司域名邮箱,别用 user@outlook.com 直接发

附件 XML 文件本身要注意的三个细节

很多脚本能发出去,但对方打不开,问题常出在 XML 源文件上,不是发送逻辑的问题。

  • 文件末尾不能有多余空行或不可见控制字符(比如 Windows 记事本保存时加的 \r\n\r\n),用 xxd data.xml | head 或 VS Code 的“显示空白字符”确认
  • 如果 XML 是程序生成的,确保根节点前没有 print() 或日志输出混入——常见于 Python 脚本调试时忘了删 print('done'),导致 XML 开头多一行文本
  • 文件权限要放开:chmod 644 data.xml,否则 mutt 或 Python 的 open() 会因权限拒绝读取,报错信息却只显示“file not found”

最容易被忽略的是 XML 声明行和实际编码不一致——比如文件存为 UTF-8,但第一行写着 <?xml version="1.0" encoding="ISO-8859-1"?>,这种错不会阻断发送,但会让接收方解析失败,且查起来极隐蔽。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

2960

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

249

2026.02.03

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

4644

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

6017

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

2482

2024.11.28

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

5987

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2548

2023.08.10

常见的编码方式
常见的编码方式

常见的编码方式有ASCII编码、Unicode编码、UTF-8编码、UTF-16编码、GBK编码等。想了解更多编码方式相关内容,可以阅读本专题下面的文章。

1468

2023.10.24

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

0

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn