【发布时间】:2020-06-15 00:50:00
【问题描述】:
嗨,我正在尝试从批处理 file.bat 发送电子邮件,但我收到了一个红色错误列表,并且滚动速度非常快,并且窗口关闭也很快我试图通过命令使其保持打开状态
cmd /k
它仍然打开,但不会显示任何错误列表。
不是这样:我使用 Gmail 帐户作为 smtp,我打开了 smtp 设置并启用了不太安全的登录选项。
最后运行 bat 的是那个命令。 cmd执行命令:
file.bat "mygmail@gmail.com" "mypassword" "D:\test\myFile.txt"
file.bat 包含:
@ECHO OFF
SET GmailAccount=%~1
SET GmailPassword=%~2
SET Attachment=%~3
CALL :PowerShell
CD /D "%PowerShellDir%"
Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%' '%GmailAccount%' '%GmailPassword%' '%Attachment%'"
EXIT
:PowerShell
SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0
SET PSScript=%temp%\~tmpSendeMail.ps1
IF EXIST "%PSScript%" DEL /Q /F "%PSScript%"
ECHO $Username = $args[0]>> "%PSScript%"
ECHO $EmailPassword = $args[1]>> "%PSScript%"
ECHO $Attachment = $args[2]>> "%PSScript%"
ECHO >> "%PSScript%"
ECHO $Username = $Username >> "%PSScript%"
ECHO $EmailTo = "target@mail.com" >> "%PSScript%"
ECHO $EmailFrom = "mygmail@gmail.com" >> "%PSScript%"
ECHO $Subject = "test" >> "%PSScript%"
ECHO $Body = "test" >> "%PSScript%"
ECHO $SMTPServer = "smtp.gmail.com" >> "%PSScript%"
ECHO $SMTPMessage = New-Object System.Net.Mail.MailMessage($EmailFrom, $EmailTo, $Subject, $Body) >> "%PSScript%"
ECHO $Attachment = New-Object System.Net.Mail.Attachment($Attachment) >> "%PSScript%"
ECHO $SMTPMessage.Attachments.Add($Attachment) >> "%PSScript%"
ECHO $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) >> "%PSScript%"
ECHO $SMTPClient.EnableSsl = $true >> "%PSScript%"
ECHO $SMTPClient.Credentials = New-Object System.Net.NetworkCredential($Username, $EmailPassword) >> "%PSScript%"
ECHO $SMTPClient.Send($SMTPMessage)
请帮助我这里有什么问题。谢谢。
【问题讨论】:
-
写一个空行:用
echo/替换echo <a lot of spaces>(加上很多空格,如果你坚持的话)。您忘记将最后一行重定向到 PS-Script。将exit替换为exit /b以避免关闭窗口。 -
除了 Stephan 提出的非常好的建议之外,我建议删除
IF EXIST "%PSScript%" DEL /Q /F "%PSScript%"并在下一行ECHO $Username = $args[0]>> "%PSScript%"删除一个>以创建 PowerShell 脚本文件并覆盖现有文件。在我看来,编写一个创建 PowerShell 脚本并使用该脚本文件执行 PowerShell 的批处理文件是没有意义的。为什么不编写 PowerShell 脚本并使用该脚本文件和脚本的三个参数启动 PowerShell?
标签: powershell email batch-file