Powershell-发送电子邮件html

Powershell-发送电子邮件html,html,email,powershell,Html,Email,Powershell,我有一个代码,检查磁盘上的可用空间,并发送电子邮件提醒我,但我希望电子邮件是在html。我做错了什么? 这是我的代码: $html= @' <!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>

我有一个代码,检查磁盘上的可用空间,并发送电子邮件提醒我,但我希望电子邮件是在html。我做错了什么?

这是我的代码:

$html=
@'
<!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>
 <style type="text/css">
  .alert {{
    background-color: #FB1717 }}
  </style>
</head>
<body>
<table>
<colgroup><col/><col/><col/><col/><col/><col/><col/></colgroup>
<tr><th>SystemName</th><th>DeviceID</th><th>VolumeName</th><th>Size(GB)</th><th>FreeSpace(GB)</th></tr>
{0}
</table>
</body></html>
'@

$entryTemplate = '<tr><td>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td><td>{4}</td><td>{5}</td><td>{6}</td></tr>'
$alertEntryTemplate = '<tr class="alert"><td>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td><td>{4}</td><td>{5}</td><td>{6}</td></tr>'


Function Get-ComInfo {   
param(
$computers

)

#Here LOW Space thresold is lessthan 10% of the total size of the Volume
$PercentFree = @{Name="FreeSpace(GB)";Expression={"{0:N1}" -f($_.freespace /1GB)}} 
Get-WmiObject Win32_LogicalDisk -filter "DriveType=3" -computer $computers |
Select SystemName,DeviceID,VolumeName,$PercentFree,@{Name="Size(GB)";Expression={"{0:N1}" -f($_.size/1gb)}},@{name="PercentFree(%)";Expression={int}}

}

$entries = Get-Content U:\Users\xxx\Desktop\servers.txt | % { Get-ComInfo -computers $_ } | % {

    if ([float]::Parse($_.'FreeSpace(GB)') -le 5) {
        $alertEntryTemplate -f $_.SystemName, $_.DeviceID, $_.VolumeName, $_.'FreeSpace(GB)', $_.'Size(GB)', $_.'PercentFree(%)', $_.'LOW SPACE'
    }

    else {
        $entryTemplate -f $_.SystemName, $_.DeviceID, $_.VolumeName, $_.'FreeSpace(GB)', $_.'Size(GB)', $_.'PercentFree(%)', $_.'LOW SPACE'
    }

}

$html -f ($entries -join ' ') | out-file U:\Users\xxx\Desktop\Drivess.htm

$EmailFrom = "xxx@xxx.com"
$EmailTo = "xxx@xxx.com" 
$Subject = "$computers DISK ISSUE DETECTED"  
$SMTPServer = "smtp.xxx.com" 
$msg = new-object Net.Mail.MailMessage  
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 25) 

$SMTPClient.EnableSsl = $false 
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("XXX", "XXX"); 
$MailTextT =  Get-Content  -Path U:\Users\XXX\Desktop\Drivess.htm 
$msg.IsBodyHTML = $true 
$msg.Body = $MailTextT | ConvertTo-Html
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $MailTextT) 
$html=
@'
HTML表格
.警惕{{
背景色:#FB1717}
SystemNameDeviceIdVolumeMenameSize(GB)可用空间(GB)
{0}
'@
$entryTemplate='{0}{1}{2}{3}{4}{5}{6}'
$alertEntryTemplate='{0}{1}{2}{3}{4}{5}{6}'
函数获取ComInfo{
param(
$computers
)
#在这里,低空间thresold小于总体积的10%
$PercentFree=@{Name=“FreeSpace(GB)”;表达式={{{0:N1}“-f($\.FreeSpace/1GB)}
获取WmiObject Win32_LogicalDisk-筛选器“DriveType=3”-计算机$computers|
选择SystemName、DeviceID、VolumeName、$PercentFree、@{Name=“大小(GB)”;表达式={{0:N1}”-f(${u.Size/1gb)}}、@{Name=“PercentFree(%);表达式={int}}
}
$entries=Get Content U:\Users\xxx\Desktop\servers.txt |%{Get ComInfo-computers$|}|%{
if([float]::Parse($_.'FreeSpace(GB)')-le 5){
$alertEntryTemplate-f$\.SystemName、$\.DeviceID、$\.VolumeName、$\.FreeSpace(GB)、$\.Size(GB)、$\.PercentFree(%)'、$\.LOW SPACE'
}
否则{
$entryTemplate-f$\.SystemName、$\.DeviceID、$\.VolumeName、$\'FreeSpace(GB)'、$\'Size(GB)'、$\'PercentFree(%)'、$\'LOW SPACE'
}
}
$html-f($entries-join“”)|输出文件U:\Users\xxx\Desktop\drivers.htm
$EmailFrom=”xxx@xxx.com"
$EmailTo=”xxx@xxx.com" 
$Subject=“$computers磁盘问题检测到”
$SMTPServer=“smtp.xxx.com”
$msg=新对象Net.Mail.MailMessage
$SMTPClient=新对象Net.Mail.SMTPClient($SmtpServer,25)
$SMTPClient.EnableSsl=$false
$SMTPClient.Credentials=新对象System.Net.NetworkCredential(“XXX”、“XXX”);
$MailTextT=获取内容-路径U:\Users\XXX\Desktop\drivers.htm
$msg.IsBodyHTML=$true
$msg.Body=$MailTextT |转换为Html
$SMTPClient.Send($EmailFrom、$EmailTo、$Subject、$MailTextT)
我在电子邮件中得到这样一个结果:

<!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>  <style type="text/css">   .alert {     background-color: #FB1717 }   </style> </head> <body> <table> <colgroup><col/><col/><col/><col/><col/><col/><col/></colgroup> <tr><th>SystemName</th><th>DeviceID</th><th>VolumeName</th><th>Size(GB)</th><th>FreeSpace(GB)</th></tr> <tr><td>K005</td><td>C:</td><td></td><td>76,5</td><td>111,0</td><td></td><td></td></tr> <tr><td>K005</td><td>U:</td><td>Nowy</td><td>87,4</td><td>465,8</td><td></td><td></td></tr> </table> </body></html>
HTML TABLE.alert{background color:#FB1717}SystemNameDeviceIDVolumeNameSize(GB)FreeSpace(GB)K005C:765111,0 K005U:Nowy874465,8

而不是转换成html,我不知道为什么?我尝试转换为html
$msg.Body=$MailTextT | ConvertTo html

您不应该在文本上使用ConvertTo html,因为您已经准备好格式化文本

只需直接使用html文本(并使用-raw整体阅读内容):


-Raw
不工作。还是一样的。电子邮件:它没有转换成html。但是,thx的答案:)您的电子邮件发送正确。然后我假设这是一个html格式问题,因为它非常有限,您可以在电子邮件中使用html。检查您的格式和常见缺陷:和此链接:。他们应该会帮你解决格式问题。在我看来,一切都很好,但我可能错了,因为我对html几乎没有经验。也许有人有其他想法吗?我一直在寻找其他代码,尝试新的想法,但仍然是一样的。我给gmail发了一封电子邮件,但它不起作用。好的,我能做到。我添加:
$OutputFile=“U:\Users\xxx\Desktop\drivers.html”$MailTextT=Get Content-Path U:\Users\xxx\Desktop\drivers.html-Raw$msg=New object Net.Mail.MailMessage($EmailFrom,$EmailTo,$Subject,$body)$msg.IsBodyHTML=$true$SMTPClient.Send($msg)
Thx获取帮助!
$MailTextT =  Get-Content  -Path U:\Users\XXX\Desktop\Drivess.htm -Raw
$msg.IsBodyHTML = $true 
$msg.Body = $MailTextT