2015-03-30 127 views
0

我有一个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 = "[email protected]" 
$Password = "xyz-password" 
$to = "[email protected]" 
$bcc = "[email protected]" 
$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 <[email protected]>" 
$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) 

所以,当它手动运行时,它可以正常工作(带附件)...每一次! 当我将它设置为通过任务计划程序运行时,它可以工作(发送电子邮件)但是没有附件!它运行良好,直到今天(!)

我不知道如何调试或测试这一切...任何帮助将不胜感激!

谢谢!!! B-

+0

您未在代码中使用send-mailmessage。在你的描述中,你说你是。这真的是你在日程安排中运行的脚本吗? – alroc 2015-04-14 17:05:43

+0

执行计划任务的用户帐户是否有权访问附件的UNC路径? – alroc 2015-04-14 17:10:37

回答

0

我是一个相对较新的人,现在只用PowerShell工作了大约7个月,但我可能会提供帮助。尽管我通常使用Send-MailMessage -To-From等方式(您是否尝试过使用this?)方法发送电子邮件,但我也使用过您显示的方法。

从查看您的代码并将其与我的相比较,我注意到您缺少$attachment = New-Object System.Net.Mail.Attachment($emailAttach, $attachmentType)。我还看到,我在脚本中发表了一条评论,您需要在发送电子邮件后包含$message.Dispose(),否则将出现对附件的写入锁定问题。

希望这有助于!

0

我有同样的问题。以下双线作品适合我,可以预定。更改[email protected]等以匹配您的帐户和凭据:

$credentials = new-object Management.Automation.PSCredential “[email protected]”, (“gmail-user's password” | ConvertTo-SecureString -AsPlainText -Force) 

Send-MailMessage -From "[email protected]" -to "[email protected]" -Subject "Some subject" 
-Body "Some body" -SmtpServer "smtp.gmail.com" -port 587 -UseSsl 
-Credential $credentials -Attachments "C:\an-attachment.txt"