我有一个ps1脚本,可以在任务计划程序的事件中有条件地运行。触发我的脚本的事件是完成并写入“...已成功完成”到任务计划程序事件日志的另一个任务。发生这种情况时,我的脚本会向特定用户发送附带文件的HTML电子邮件(send-mailmessage)。 问题是它在我手动运行时有效,但是当我设置条件(仍然发送电子邮件)但没有附加文件时!...这是我的代码:
$HTML = @"
<!DOCTYPE html>
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
<TITLE></TITLE>
$Messages
</body></html>
"@
$SMTPServer = "smtp.myserver.com"
$SMTPPort = "1234"
$Username = "xyz@mycompany.com"
$Password = "xyz-password"
$to = "Automation@xxxxx.net"
$bcc = "testuser@xyz.net"
$subject = "My Import Alert"
$attachment = "(unc path to the .csv)-$(get-date -f yyMMdd).csv"
$message = New-Object System.Net.Mail.MailMessage
$message.subject = $subject
$message.body = $HTML
$message.IsBodyHTML = $true
$message.to.add($to)
$message.bcc.add($bcc)
$message.from = "Import Alerts <Automation@xyz.net>"
$message.attachments.add($attachment)
$smtp = New-Object System.Net.Mail.SmtpClient($SMTPServer, $SMTPPort);
$smtp.Credentials = New-Object System.Net.NetworkCredential($Username, $Password);
$SMTPMessage=New-Object System.Net.Mail.MailMessage
$smtp.send($message)
所以,当它手动运行时,它工作正常(带附件)......每次!! 当我将它设置为通过任务调度程序运行时它工作(发送电子邮件)但是没有附件!直到今天(!)
,它运行得很好我根本不知道如何调试或测试...任何帮助都将非常感谢!!
谢谢!!! 乙 -
答案 0 :(得分:0)
我自己比较新,现在只使用PowerShell大约7个月了,但我可以提供帮助。虽然我通常使用Send-MailMessage -To -From等(你试过this?)方法来发送电子邮件,但我也使用了你偶尔展示的方法。
从查看代码并将其与我的代码进行比较后,我注意到您遗漏了$attachment = New-Object System.Net.Mail.Attachment($emailAttach, $attachmentType)
。我还看到我在我的脚本中发表了一条评论,您在发送电子邮件后需要包含$message.Dispose()
,否则将会对相关附件进行写锁定。
希望这有帮助!
答案 1 :(得分:0)
我遇到了同样的问题。以下双线程为我工作,可以安排。更改gmail-user@gmail
等以匹配您的帐户和凭据:
$credentials = new-object Management.Automation.PSCredential “gmail-user@gmail.com”, (“gmail-user's password” | ConvertTo-SecureString -AsPlainText -Force)
Send-MailMessage -From "gmail-user@gmail.com" -to "someone-else@gmail.com" -Subject "Some subject"
-Body "Some body" -SmtpServer "smtp.gmail.com" -port 587 -UseSsl
-Credential $credentials -Attachments "C:\an-attachment.txt"