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

PowerShell发送HTML邮件显示源码问题求助

问题描述

我写了一段PowerShell代码用来发送邮件,但邮件正文显示的是完整HTML源码(比如<html xmlns="http://www.w3.org/1999/xhtml">这类标签),不是渲染后的格式化内容。

邮件示例源码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>HTML TABLE</title> </head><body> <h2>Folders older than 30 days</h2>
<div>
    Folders were removed on - now
    <br></br>
    Location: \\Server01\XFER\Cory
</div>
<br></br> <table> </table> </body></html>

邮件显示情况:正文直接展示上述HTML标签,未渲染成带标题、换行的可视化格式。

当前使用的PowerShell代码:

$EmailFrom = “testing1@outlook.com”

$EmailTo = “testing1@outlook.com”

$Subject = “Test”

$body = ConvertTo-Html -PreContent @"
 <h2>Folders older than 30 days </h2>
<div>
    Folders were removed now
    <br> </br>
    Location: here
</div>
 <br> </br>
"@

$SMTPServer = “smtp.outlook.com”

$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)

$SMTPClient.EnableSsl = $true

$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("testing1@outlook.com", "powershell")

$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body )
解决方法

核心问题是你使用了SmtpClient.Send()的简单参数重载,它默认将邮件正文识别为纯文本,导致HTML标签直接显示。要让HTML正常渲染,需要创建MailMessage对象并明确设置IsBodyHtml = $true,再通过SmtpClient发送该对象。

修改后的完整代码
$EmailFrom = "testing1@outlook.com"
$EmailTo = "testing1@outlook.com"
$Subject = "Test"

$body = ConvertTo-Html -PreContent @"
 <h2>Folders older than 30 days </h2>
<div>
    Folders were removed now
    <br> </br>
    Location: here
</div>
 <br> </br>
"@

$SMTPServer = "smtp.outlook.com"
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("testing1@outlook.com", "powershell")

# 创建MailMessage对象并开启HTML格式支持
$mailMessage = New-Object System.Net.Mail.MailMessage($EmailFrom, $EmailTo, $Subject, $body)
$mailMessage.IsBodyHtml = $true

# 发送邮件
$SMTPClient.Send($mailMessage)
额外提示
  • ConvertTo-Html生成的是完整HTML文档,设置IsBodyHtml = $true后,邮件客户端会自动解析渲染标签。
  • 代码中请使用英文半角引号,避免因中文引号引发语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:20:52