使用 PowerShell 命令从批处理文件发送多行正文电子邮件

问题描述 投票:0回答:3

我正在尝试编写一个批处理文件,该文件将使用 PowerShell 命令发送电子邮件。 我唯一的挑战是向电子邮件正文添加多行。

我在变量 EmailBody 中声明消息,然后在 PS 命令中使用它。 问题是当我在 Outlook 2016 中收到电子邮件时,``r``n 仅显示为纯文本。 我尝试使用 HTML 标签
但失败了,因为即使我在批处理文件中使用 ^ 转义它们,PowerShell 也会看到 ^ 并且不喜欢它。

@echo off

:: Log File Configuration
SET DateStamp=%date:~-4,4%%date:~-7,2%
SET LogFile=F:\WinSCP_%DateStamp%.log

:: Email Configuration
SET SMTPServer=server.com
SET EmailFrom=%computername%@company.com
SET EmailTo="[email protected]", "[email protected]"
SET EmailSubject=Subject
SET EmailAttachment=%LogFile%
SET EmailBody="Line1 Line2 Line3"


Some code


Powershell.exe -executionpolicy remotesigned -Command "& {Send-MailMessage -To '%EmailTo%' -From '%EmailFrom%' -Subject '%EmailSubject%' -SmtpServer '%SMTPServer%' -Body '%EmailBody%' -Attachments '%EmailAttachment%'}"
                    
some code
html powershell email batch-file cmd
3个回答
1
投票

这是问题代码的修订版本。希望这也比一行行更具可读性。全部用 PowerShell 编写会让事情变得更加简单。

SET "EmailSubject=Subject"
SET "EmailBody=Line1 Line1`r`nLine2 Line2`r`nLine3 Line3"
SET "EmailAttachment=%USERPROFILE%\tp.txt"

powershell.exe -NoLogo -NoProfile -Command ^
    "Send-MailMessage" ^
        "-To %EmailTo%" ^
        "-From '%EmailFrom%'" ^
        "-Subject '%EmailSubject'" ^
        "-SmtpServer '%SMTPServer%'" ^
        "-Body '%EmailBody%'" ^
        "-Attachments %EmailAttachment%"

0
投票

您应该能够在任何想要换行的地方输入 `r`n,PowerShell 会将其计算为回车符和换行符(即 Windows 风格的新行)。

我同意其他回复的观点,即在纯 PowerShell 中执行此操作可能是一个更好的主意。


0
投票

这对我有用。 换行很重要的是

-BodyAsHtml
并使用
<br>

set subject=Test BATCH with Log
set [email protected]
set EmailAttachment=%LogPath%%LogFile%
set "EmailBody=%row1%<br>%row2%"
powershell -ExecutionPolicy ByPass -Command "Send-MailMessage -SmtpServer 'smtp.ftn.local' -To '%email_to%' -From '[email protected]' -Subject '%subject%' -Body '%EmailBody%' -BodyAsHtml -Attachments %EmailAttachment% -Priority high"
© www.soinside.com 2019 - 2024. All rights reserved.