首页 > 解决方案 > Powershell - 邮件消息正文不会换行

问题描述

我已经绞尽脑汁好几个小时了。我想要的只是以下内容。

202011.txt

3   12/28/2020 4:22:56.008 PM   Front                   MOTION
10  12/28/2020 4:23:02.619 PM   Joessomebody            ::ffff:10.60.0.169: Login
3   12/28/2020 4:23:30.610 PM   Front                   MOTION
3   12/28/2020 4:24:05.131 PM   Front                   MOTION

它在电子邮件中一直看起来像这样

3 12/28/2020 4:22:56.008 PM Front MOTION 10 12/28/2020 4:23:02.619 PM Joessomebody ::ffff:10.60.0.169: Login 3 12/28/2020 4:23:30.610 PM Front MOTION 3 2020 年 12 月 28 日下午 4:24:05.131 前运动

$SmtpClient = new-object system.net.mail.smtpClient

$MailMessage = New-Object system.net.mail.mailmessage

$SmtpClient.Host = "campus.Test.com"

$mailmessage.from = ("No-Reply@Test.org")

$mailmessage.To.add("Me@Test.org")

function Get-LastLinesNew
{
$v = Get-Content -Path "C:\BlueIris\log\202011.txt" -Tail 5
return ($v)
}
$mailmessage.Subject = “Alert - NVR - Blue Iris - Logs”

<#$mailmessage.Body = “Alert Body with Instruction to recipients”#>

$file = "C:\BlueIris\log\202011.txt"

$attach = Get-LastLinesNew
$attach = $attach -replace "'r'n","<br />"
$MailMessage.IsBodyHtml = $true
$attach    #For Testing 
$MailMessage.body = $attach -replace "'r'n","<br />"
$MailMessage.body #For Testing
pause   #For Testing

try
{
    $smtpclient.Send($mailmessage)
}
catch [System.Management.Automation.MethodInvocationException] 
{
    $MailMessage.Attachments.Dispose()
    $MailMessage.Body = "File Size to large, ERROR"
    $MailMessage.Subject = "NVR ERROR"
    $smtpclient.Send($MailMessage)

}

我只是将功能剥离到最低限度,但它仍然失败

$MailMessage = New-Object system.net.mail.mailmessage
$attach = Get-Content -Path "\\NVR\c$\BlueIris\log\202011.txt" -Tail 5
$attach = $attach -replace "'r'n","<br />"
$MailMessage.IsBodyHtml = $True
$attach
$MailMessage.body = $attach
$MailMessage.body
pause

结果

还有 PSVersion 5.1.19041.610

标签: powershellmailmessage

解决方案


最后,我需要将 Out-String 作为管道命令添加到 Get-Content

function Get-LastLinesNew
{
$v = Get-Content -Path "C:\BlueIris\log\202011.txt" -Tail 5 | Out-String
return ($v)
}

就这样,它像梦一样工作。我猜powershell shell内置了某种自动格式化功能,允许它在使用replace命令时将所有字符串显示为一个字符串,然后将其显示在屏幕上。一旦它进入邮件消息,它就会再次将其作为数组读取并丢失所有格式。奇怪但解决了。感谢大家!!!!


推荐阅读