Powershell电子邮件:如何在电子邮件正文中添加新行?

10

我对Powershell非常陌生。编写了一个完美运行的powershell脚本,但当它发送邮件时,正文中不显示换行符。以下是配置:

非常新手Powershell。编写好的 Powershell 脚本能够很好地工作,但当它要发送邮件时,在正文中无法显示换行符。下面是相关配置:

$EmailFrom = "monitoring@mydomainname.no"
$EmailTo = "fatherazrael@tcs.com"
$Subject = "Disk Space Low: $server"

$Body = "Server Name:  $server, <NEED NEW LINE> Drive: C,  <NEED NEW LINE>  Total Size: $sizeGB,  <NEED NEW LINE> Space Left: $freeSpaceGB"

$SMTPServer = "scan.opinergo.fn"
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 25)
#$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("<From mail ID>", "Password");
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)   

在正文中,我使用了以下内容代替“搜索周围”:

1)%0d%0a - 当用户检查邮件时无法工作

2)\ n-当用户检查邮件时无法工作

3)< br > - 用户检查邮件时不起作用

请问还有什么其他方法可以换行或脚本需要进行哪些修改?


PowerShell的换行符是\n`(反斜杠-n),你试过了吗? - TessellatingHeckler
还没有在搜索中找到。谢谢。正在尝试。 - fatherazrael
@TessellatingHeckler 谢谢。它正在运行。 - fatherazrael
请注意,自Outlook 2003起,默认情况下会删除双\n。https://learn.microsoft.com/en-us/outlook/troubleshoot/message-body/line-breaks-are-removed-in-posts-made-in-plain-text - RedX
5个回答

13

我不确定其他用户是如何让`n创建新行的,但我从来无法使其工作...

相反,我最终使用了以下方法...

  • 使用-BodyAsHtml开关
  • 使用<br /> (换行) html标签

例如...

powershell -ExecutionPolicy ByPass -Command Send-MailMessage -BodyAsHtml -SmtpServer 'myemail.server.com' -To 'Mr To <to@server.com>' -From 'Mr From <from@server.com>' -Subject 'Reports From Daily SQL Backup Jobs' -Body 'There was an issue backing up the databases and sending them to the virtual drive.<br />Test Line 2.<br />Test Line 3.-more on line 3<br />Test Line 4.<br />EOF<br />'"

谢谢。我尝试过"r"、"n"、"rn"、[System.Environment]::NewLine以及一些我已经忘记的组合。结果要么没有回车,要么有两个回车,非常烦人。 - Bbb
是啊,我也花了太多时间了。直到我发现使用 HTML 是正确的方法之前,它一直让我抓狂。 - Arvo Bowen

12

(来自我的评论)

PowerShell的换行符指示器是 `n (反引号-n),因此:

$Body = "Server Name:  $server, <NEED NEW LINE> Drive: C

成为:

$Body = "Server Name:  $server, `n Drive: C

2
最初的回答:从技术上讲,它需要这样做:

$body = "first line" + "`n" + "second line"

否则第一行会带有一个尾随空格,第二行会带有一个前导空格。最初的回答。

1
不要创建新答案,而是在现有答案上进行评论或编辑。 - Slogmeister Extraordinaire

1

我只是按照您想要的方式将其放入脚本中,这对我有效,尽管我使用的是4.0版本。不确定您使用的是哪个版本或者是否有差别。

$Body = "Server Name:  $server
Drive: C
Total Size: $sizeGB
Space Left: $freeSpaceGB"

它上面没有显示,但每个部分都在自己的行上。 - Jay Lavin
欢迎来到SO!我已经为您修复了排版。有关一般指导,请参阅https://stackoverflow.com/help/answering或https://stackoverflow.com/help/formatting以获取有关排版的提示。 - B--rian

-1
PowerShell的换行指示符是n,只能在双引号中使用。单引号将打印实际的"n"。
$Body = "Server Name:  $server, <NEED NEW LINE> Drive: C"

变成:

$Body = "Server Name:  $server,`nDrive: C"

请勿复制粘贴其他用户的答案。 - MrUpsidown

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接