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

PowerShell发送HTML邮件特殊字符编码异常问题求助

解决PowerShell发送邮件时德语特殊字符乱码的问题

这问题我碰过好几次了,本质是编码的双重处理搞出来的乱码——你虽然给Send-MailMessage指定了UTF8,但要么是HTML内容没告诉客户端用UTF8解析,要么是ConvertTo-Html的输出编码出了问题,才会出现äöüß这种典型的UTF8被当作ASCII解析的乱码。

下面是具体的解决步骤,按顺序来:

1. 给HTML内容添加UTF8编码声明

因为你用了-BodyAsHTML,邮件客户端会按HTML规则解析内容,但如果HTML头部没声明编码,客户端可能会用默认的ASCII或其他编码来读取,自然就乱码了。一定要在HTML的<head>里加上<meta charset="UTF-8">:

# 直接构造包含编码声明的完整HTML内容
$HTMLmessage = @"
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
test beigefügt Zusätzlich verfügbar. äöüß
</body>
</html>
"@

2. 修正ConvertTo-Html的编码问题

你提到用了ConvertTo-Html,这个cmdlet默认输出的是基于ASCII的字符串,直接使用会丢失特殊字符的UTF8信息。要确保它生成的内容是正确的UTF8格式:

# 假设你原本是把某个文本转成HTML片段
$rawText = "test beigefügt Zusätzlich verfügbar. äöüß"
# 生成HTML片段
$htmlFragment = $rawText | ConvertTo-Html -Fragment
# 把片段嵌入带编码声明的完整HTML结构中
$HTMLmessage = @"
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
$htmlFragment
</body>
</html>
"@

3. 优化Send-MailMessage的编码参数

虽然你已经指定了UTF8编码,但用无BOM的UTF8会更稳妥(有些邮件服务器或客户端对UTF8 BOM敏感),把编码参数改成:

Send-MailMessage -From $fromemail -To $users -Subject "Test through ps" `
  -Encoding ([System.Text.UTF8Encoding]::new($false)) `
  -BodyAsHTML -Body $HTMLmessage -Priority Normal -SmtpServer $server

核心逻辑

  • 编码声明让邮件客户端明确知道用UTF8解析内容,不会乱猜编码;
  • 修正ConvertTo-Html的输出环节,避免特殊字符被转成ASCII格式;
  • 无BOM的UTF8兼容性更好,减少服务器或客户端的识别偏差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:54:01