2016-10-06 3 views
0

Мы извлекаем файлы из стороннего приложения каждый день и отправляем сообщение электронной почты со всеми файлами, скопированными на соответствующее лицо с другой стороны. Когда я создаю html-файл, мои результаты ожидаются, но когда я пытаюсь внедрить те же результаты, что и 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 = "[email protected]" 
from = "[email protected]" 
BodyAsHtml = $True 
Body = $html 
Subject = "Files in the folder" 
SmtpServer = "mailserver" 
} 

Send-MailMessage @email 
+0

CSS-и HTML интерпретируется большинство клиентов электронной почты является небольшой частью того, что понимают браузеры. См. Https://www.campaignmonitor.com/css/ –

ответ

1
  1. ConvertTo-Html преобразует объекты в HTML, тогда как вы уже производят HTML вручную.
    Переведите его в $body и используйте его в -body параметр ConvertTo-Html.
  2. Там нет необходимости $root, просто использовать $path в Get-ChildItem
  3. PS3.0 + имеет -File переключатель в Get-ChildItem перечислять только файлы, так where не нужны
  4. Это безопаснее использовать -LiteralPath всегда, чтобы не потерпеть неудачу на дорожках с [ и ] символами, интерпретируемыми как спецификатор подстановки.
  5. В PowerShell нет никакой необходимости, чтобы избежать \ внутри строки, просто написать 'D:\Temp'

$body = Get-ChildItem -Literal $path -Recurse -File -Include *.xlsx, *.docx, *.txt, *.csv | 
     ForEach { 
      $fPath = $_.FullName.Substring($path.Length + 1) 
      "<a href=""$fPath"">$fPath</a><br>" 
     } 
$html = ConvertTo-Html -Head $head -Body $body | Out-String