电子邮件正文中嵌入的HTML结果不符合预期

时间:2016-10-06 20:40:05

标签: html email powershell-v3.0

我们每天从第三方应用程序中提取文件,然后发送一封电子邮件,将所有文件复制到另一方的相关人员。当我生成html文件时,我的结果是预期的,但当我尝试在我的电子邮件正文中嵌入与html相同的结果时,我只得到数字而不是文件夹路径&文件名。不确定导致这种情况的原因。请指导我。

$head = @"
<Title>Files in folder</Title>
<style>
Body   { font-family: "Verdana", "Geneva", sans-serif; background-color:#F0E68C; }
table  { border-collapse:collapse; width:50% }
td     { font-size:12pt; border:1px #0000FF solid; padding:5px 5px 5px 5px; }
th     { font-size:14pt; text-align:left; padding-top:5px; padding-bottom:5px; background-color:#0000FF; color:#FFFFFF; }
name tr{ color:#000000; background-color:#0000FF; }
</style>
"@

#file path
$path = "D:\\Temp"
$root = (Get-Item $path).FullName

#output html as string
$html = Get-ChildItem $root -recurse -include *.xlsx, *.docx, *.txt, *.csv | 
        where { $_.PSIsContainer -eq $false } | % 
        {
        $fPath = $_.FullName.Remove(0, $root.Length + 1)
        Write-Output "<a href=`"$fPath`">$fPath</a><br />" 
        } | ConvertTo-Html -Head $head | Out-String

#email
$email = @{
 To = "userA@domain.com"
 from = "userB@domain.com"
 BodyAsHtml = $True
 Body = $html
 Subject = "Files in the folder"
 SmtpServer = "mailserver"
}

Send-MailMessage @email

1 个答案:

答案 0 :(得分:1)

  1. ConvertTo-Html将对象转换为HTML,而您已手动生成HTML 将其放入$body变量并使用-body的{​​{1}}参数。
  2. 不需要ConvertTo-Html,只需在$root中使用$path
  3. PS3.0 +在Get-ChildItem-File切换,仅列出文件,因此不需要Get-ChildItem
  4. 使用where总是更安全,以便在-LiteralPath[字符被解释为通配符说明符的路径上不会失败。
  5. 在PowerShell中,无需在字符串内转义],只需编写\
  6. 'D:\Temp'