首页 > 解决方案 > 如何在PowerShell脚本中为电子邮件正文中的特定变量值着色

问题描述

我正在使用以下 Powershell 脚本发送邮件

$smtpServer ="111.11.1.1.11"
$smtp = New-Object Net.Mail.SmtpClient($smtpServer)
$msg=new-object Net.Mail.MailMessage
$msg.From="noreply@x.com"
$msg.To.Add("x@x.com")
$Success  = $passed/$total*100;
$Failed = $Total- $Passed;
$msg.Subject = "BVT On Build"+$Buildno+",Total :"+ $Total+"  Passed :"+ 
$Passed+"  Failed :"+$Failed+"" #$subject
$msg.Body = "This is an autogenerated mail from  VM - Total Tests Run 
:"+$Total+" `n`n Total Tests Passed :"+ $Passed+" `n`n Pass Percentage 
:"+$Success+" `n`n Failed test cases 'n'n"+$Failed+""
$smtp.Send($msg)

我的要求是在电子邮件正文中为特定的变量值(例如: $Failed in $msg.Body )着色。我怎样才能做到这一点?请你帮忙

我知道以下方法,但它仅用于写入主机 Write-Host $myVariable -ForegroundColor 'Red'

我的输出应该是这样的 这是来自 VM 的自动生成的邮件 - 运行总测试 12 总测试通过:6 通过百分比:50% 失败的测试用例:6(红色)

标签: powershellemail

解决方案


您将需要使用HTML格式来为电子邮件正文中的元素着色。IF/ELSE设置所需颜色的简单条件表达式。此外,您必须将IsBodyHtml属性设置为,True以便邮件正文不会是纯文本。

$smtpServer ="111.11.1.1.11"
$smtp = New-Object Net.Mail.SmtpClient($smtpServer)
$msg=new-object Net.Mail.MailMessage
$msg.From="noreply@x.com"
$msg.To.Add("x@x.com")
$Success = $passed/$total*100

$SuccessFormatted  = if ($Success -ge 50){
                       '<font color="green">{0}</font>' -f $Success
                     }
                     else{
                       '<font color="red">{0}</font>' -f $Success
                     }

$Failed = $Total- $Passed;
$msg.Subject = "BVT On Build"+$Buildno+",Total :"+ $Total+"  Passed :"+ 
$Passed+"  Failed :"+$Failed+"" #$subject
$msg.Body = "This is an autogenerated mail from  VM - Total Tests Run 
:"+$Total+" `n`n Total Tests Passed :"+ $Passed+" `n`n Pass Percentage 
:"+$SuccessFormatted+" `n`n Failed test cases 'n'n"+$Failed+""

$msg.IsBodyHtml = $true

$smtp.Send($msg)

推荐阅读