powershell - 通过带有批处理文件的PowerShell发送带有附件的电子邮件
问题描述
嗨,我正在尝试从批处理 file.bat 发送电子邮件,但我收到了一个红色错误列表,并且滚动速度非常快,并且窗口关闭也很快我试图通过命令使其保持打开状态
cmd /k
它仍然打开,但不会显示任何错误列表。
不是这样:我使用 Gmail 帐户作为 smtp,我打开了 smtp 设置并启用了不太安全的登录选项。
最后运行蝙蝠的是那个命令。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)
请帮助我这里有什么问题。谢谢。
解决方案
首先:这是一个关于如何使用谷歌帐户安全性较低的应用程序的提醒
PS-Gmail-Sender.bat
@ECHO OFF
REM https://stackoverflow.com/questions/28605803/can-not-send-mail-using-smtp-gmail-com-port-587-from-vbs-script/28606754#28606754
Title Sending E-Mail with Gmail Less Secure Applications using Powershell and Batch
SET GmailAccount="%~1"
SET GmailPassword="%~2"
SET Attachment="%~3"
REM We write our Powershell script
CALL :WritePS
REM We execute our Powershell script .PS1 by passing arguments from the command line or a batch file
Powershell -ExecutionPolicy bypass -noprofile -file "%PSScript%" "%GmailAccount%" "%GmailPassword%" "%Attachment%"
IF EXIST "%PSScript%" DEL /Q /F "%PSScript%"
pause
EXIT
REM -----------------------------------------------------------------------------------------------------
:WritePS
SET PSScript=%temp%\temp_SendeMail.ps1
> "%PSScript%" (
ECHO $Username = $args[0]
ECHO $EmailPassword = $args[1]
ECHO $Attachment= $args[2]
ECHO $EmailTo = $Username
ECHO $EmailFrom = $Username
ECHO $Subject = "This email was sent from Powershell script into a batch file with Less Secure Application Enabled"
ECHO $Body= "Test Email Sending with a script"
ECHO $SMTPServer = "smtp.gmail.com"
ECHO $SMTPMessage = New-Object System.Net.Mail.MailMessage($EmailFrom, $EmailTo, $Subject, $Body^)
ECHO $Attachment = New-Object System.Net.Mail.Attachment($Attachment^)
ECHO $SMTPMessage.Attachments.Add($Attachment^)
ECHO $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587^)
ECHO $SMTPClient.EnableSsl = $true
ECHO $SMTPClient.Credentials = New-Object System.Net.NetworkCredential($Username, $EmailPassword^)
ECHO $SMTPClient.Send($SMTPMessage^)
)
Exit /B
REM -----------------------------------------------------------------------------------------------------
因此,使用命令行或批处理文件,我们可以如下调用它:
PS-Gmail-Sender.bat "Mygmail_Account@gmail.com" "MyGmail_Password" "D:\test\myFile.txt"
推荐阅读
- html - 如何防止背景颜色围绕图例标签
- oracle - 在 CentOS 8 上安装 Oracle Database 19c - oraInstall
.out(权限被拒绝) - python - aiohttp。从 url 保存的巨大 csv 未满
- google-analytics - Google Analytics - 查找最受欢迎的网站目录
- java - 在 Spring Boot Rest 中使用 POST 方法更新对象的特定数据
- postgresql - 如何在具有不同 pool_mode 的单个服务器中安装多个 PG Bouncer
- java - 例外:不支持完整输出模式
- javascript - 特定组件的触发功能 - ReactJS
- python - 无法比较字符串
- app-store - 应用程序开发人员:添加/删除应用程序功能时使权限配置文件无效