出于某种原因,当尝试在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中的电子邮件如下所示....
您可以看到已应用`n `n
双重换行符,但未应用`n
。顺便提一下,如果我改为......
foreach($item in $files)
{
$Body += "$item `n`n"
}
我看到双线休息。
如何只获得一次换行?
答案 0 :(得分:1)
只需使用[Environment] :: NewLine来解决这个问题。它将消除与此问题相关的大多数麻烦。
用法:
foreach($item in $files)
{
$Body += "$item " + [Environment]::NewLine
}
答案 1 :(得分:0)
如果您可以使用HTML正文,则可以使用< br>换行。 您需要在消息变量上设置以下属性:
$SMTPMessage.IsBodyHTML = $true
$Body += "$item <br>"