powershell MailMessage正文中的单行中断无法正常工作

时间:2017-12-07 10:34:45

标签: powershell

出于某种原因,当尝试在powershell中填充电子邮件的正文时,使用`n转义序列的单个换行符不起作用,但是双重换行符。

这是我的代码......

param([string]$BuildId, [string]$BuildName)

$EmailTo = "[email]"
$EmailFrom = "sepaautomation@gmail.com"
$Subject = "$BuildName $BuildId SpecFlow Reports" 
$Body = "The following SpecFlow reports are attached: `n`n" 
$SMTPServer = "smtp.sendgrid.net"

$date = Get-Date -Format yyyy-MM-dd

$files = Get-ChildItem "C:\Build\SA.SEPA.Web.UI.Selenium" -Recurse | Where-Object { $_.Name -match "^.*$date.*\.html$" } | % { $_.FullName }

foreach($item in $files)
{
    $Body += "$item `n"
}

$SMTPMessage = New-Object System.Net.Mail.MailMessage($EmailFrom,$EmailTo,$Subject,$Body)

foreach($item in $files)
{
    $attachment = New-Object System.Net.Mail.Attachment($item)
    $SMTPMessage.Attachments.Add($attachment)
}

$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
$SMTPClient.EnableSsl = $true 
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("apikey", "[apiKey]"); 
$SMTPClient.Send($SMTPMessage)

这是无法添加换行符的部分

foreach($item in $files)
{
    $Body += "$item `n"
}

我在outlook中的电子邮件如下所示....

enter image description here

您可以看到已应用`n `n双重换行符,但未应用`n。顺便提一下,如果我改为......

foreach($item in $files)
{
    $Body += "$item `n`n"
}  

我看到双线休息。

如何只获得一次换行?

2 个答案:

答案 0 :(得分:1)

只需使用[Environment] :: NewLine来解决这个问题。它将消除与此问题相关的大多数麻烦。

用法:

foreach($item in $files)
{
    $Body += "$item " + [Environment]::NewLine
}

答案 1 :(得分:0)

如果您可以使用HTML正文,则可以使用< br>换行。 您需要在消息变量上设置以下属性:

$SMTPMessage.IsBodyHTML = $true

$Body += "$item <br>"