Email Powershell脚本无法使用任务计划程序通过Outlook发送电子邮件

Email Powershell脚本无法使用任务计划程序通过Outlook发送电子邮件,email,powershell,outlook,taskscheduler,Email,Powershell,Outlook,Taskscheduler,我有一个脚本正在从远程机器获取最新的事件日志。 通过outlook向特定人群发送事件日志详细信息。该脚本在通过Powershell ISE运行时运行良好,但没有使用任务调度器发送电子邮件。 任何帮助都将不胜感激。谢谢 脚本如下: $Recipients="xyz@outlook.com","abc@outlook.com" Foreach ($name in $Recipients) { $Outlook = New-Object -ComObject Outlook.Applicat

我有一个脚本正在从远程机器获取最新的事件日志。 通过outlook向特定人群发送事件日志详细信息。该脚本在通过Powershell ISE运行时运行良好,但没有使用任务调度器发送电子邮件。 任何帮助都将不胜感激。谢谢

脚本如下:

$Recipients="xyz@outlook.com","abc@outlook.com"

Foreach ($name in $Recipients) {
    $Outlook = New-Object -ComObject Outlook.Application

    $Mail = $Outlook.CreateItem(0)
    $Mail.Recipients.Add($name)
    $Mail.Subject ="Testing"
    $Mail.Body ="Demo"
    Write-Host "Sending Email"
    $Mail.Send()
}

您应该只使用Send MailMessage,而不是尝试使用Outlook COM对象。 这样,您就不需要依赖邮件配置文件和其他设置(需要在Outlook中运行任务的用户下设置这些设置)。
我在您的代码中还看到了一些奇怪的事情:为每个收件人创建一个新的COM Outlook COM对象,然后尝试发送邮件:在创建Outlook COM对象后将for循环移动到触发器似乎更符合逻辑。

任务计划程序作为服务运行-并且没有Office应用程序(包括Outlook)可以在服务中使用。

Microsoft当前不建议也不支持从任何无人参与、非交互式客户端应用程序或组件(包括ASP、ASP.NET、DCOM和NT服务)自动化Microsoft Office应用程序,因为在这种环境下运行Office时,Office可能会表现出不稳定的行为和/或死锁

如果您正在构建一个在服务器端上下文中运行的解决方案,那么您应该尝试使用安全的组件来无人值守地执行。或者,您应该尝试找到至少允许部分代码在客户端运行的替代方案。如果使用服务器端解决方案中的Office应用程序,该应用程序将缺少许多成功运行所需的功能。此外,您将面临整体解决方案稳定性方面的风险。在文章中阅读更多关于这方面的内容

 $From = "YourEmail@gmail.com"
 $To = "AnotherEmail@YourDomain.com"
 $Cc = "YourBoss@YourDomain.com"
 $Attachment = "C:\temp\Some random file.txt"
 $Subject = "Email Subject"
 $Body = "Insert body text here"
 $SMTPServer = "smtp.gmail.com"
 $SMTPPort = "587"
 Send-MailMessage -From $From -to $To -Cc $Cc -Subject $Subject `
 -Body $Body -SmtpServer $SMTPServer -port $SMTPPort -UseSsl `
 -Credential (Get-Credential) -Attachments $Attachment

也可以考虑使用EWS,请参阅更多信息。 如果通过cmd

powershell-file.\your script.ps1'
手动运行脚本,您会收到什么错误消息(如果有)?任务计划程序可能使用与您不同的用户作为命令行用户。请确保计划程序用户具有正确的Outlook邮件配置文件。@n01d显示它工作正常时没有错误。但在任务计划程序运行时,它没有发送邮件email@AxelKemper我的Outlook有3个帐户如何指定它应该从哪个帐户发送电子邮件。当您启动
Outlook.Application
对象时,它连接到当前用户的默认
Outlook
邮件配置文件。您可以创建用于邮件调度目的的技术用户,并将所需的邮件帐户配置为默认帐户。告诉计划程序将此技术用户用于计划的任务。另外,可以使用
Namespace.Logon
方法连接到指定的帐户。请向Google询问详细信息。您的意思是说我无法从outlook发送电子邮件..从任务计划运行powershell脚本时,您应该使用send MailMessage、.NET MailMessage类或EWS API(如果您使用Exchange服务器)在计划任务中使用此脚本。老实说,与实现此目标的其他可用选项相比,使用Outlook COM对象确实是错误的方法。@Vishal-是的,这就是我的意思。