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

如何用PowerShell将含标签节点的完整XML嵌入邮件正文?

解决PowerShell邮件正文展示完整XML内容的问题

纯文本邮件方案

如果用纯文本格式发送邮件,直接读取XML文件的原始内容作为正文即可,不要将XML解析为对象后再转字符串(这会破坏标签结构)。

示例脚本:

# 读取XML文件的原始内容(-Raw参数确保保留完整格式)
$xmlContent = Get-Content -Path "C:\your\file\path.xml" -Raw

# 发送纯文本邮件
Send-MailMessage -From "sender@domain.com" -To "recipient@domain.com" `
    -Subject "XML Content (Plain Text)" -Body $xmlContent `
    -SmtpServer "smtp.yourserver.com"

HTML邮件方案

如果需要HTML格式邮件,XML标签会被HTML解析引擎误判为HTML标签,必须对XML内容做HTML转义,再用<pre>标签包裹以保留原始格式。

方法1:用.NET内置工具转义

# 加载System.Web程序集(PowerShell 5+默认已加载)
Add-Type -AssemblyName System.Web

# 读取XML原始内容
$xmlContent = Get-Content -Path "C:\your\file\path.xml" -Raw

# 转义HTML特殊字符(<、>、&等)
$escapedXml = [System.Web.HttpUtility]::HtmlEncode($xmlContent)

# 构建HTML正文,<pre>标签保留换行和缩进
$htmlBody = "<pre>$escapedXml</pre>"

# 发送HTML邮件(需启用BodyAsHtml参数)
Send-MailMessage -From "sender@domain.com" -To "recipient@domain.com" `
    -Subject "XML Content (HTML)" -Body $htmlBody -BodyAsHtml $true `
    -SmtpServer "smtp.yourserver.com"

方法2:手动替换特殊字符(适用于无法加载System.Web的场景)

$xmlContent = Get-Content -Path "C:\your\file\path.xml" -Raw
# 手动替换HTML特殊字符
$escapedXml = $xmlContent -replace '&', '&amp;' -replace '<', '&lt;' -replace '>', '&gt;' -replace '"', '&quot;'
$htmlBody = "<pre>$escapedXml</pre>"

Send-MailMessage -From "sender@domain.com" -To "recipient@domain.com" `
    -Subject "XML Content (HTML)" -Body $htmlBody -BodyAsHtml $true `
    -SmtpServer "smtp.yourserver.com"

关键注意事项

  • 禁止使用[xml]$xml = Get-Content ...后再转字符串,这种操作会将XML解析为对象,转换后丢失原始标签结构。
  • HTML邮件必须转义特殊字符,否则XML标签会被当作HTML标签处理,导致内容丢失或显示异常。
  • <pre>标签能完整保留XML的换行、缩进格式,提升可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:18:19