无法在Outlook应用程序上使用PowerShell创建Outlook电子邮件草稿

时间:2017-04-15 17:36:05

标签: php powershell outlook

您需要准备Outlook电子邮件草稿并在Outlook中打开它。

我创建了php表单来运行供应变量到powershell,它会调用outlook方法并创建电子邮件。

当我按以下方式执行powershell时

C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe C:\wamp\www\bizops\prepare_email.ps1 >> C:\wamp\www\bizops\log.log

效果很好。

但是当我将上面的行放在批处理文件中并在PHP脚本中调用它时,

$mail_string="c:\WINDOWS\system32\cmd.exe /c START C:\wamp\www\bizops\outlook_mail.bat";
exec($mail_string);

它给我以下错误

 New-Object : Retrieving the COM class factory for component with CLSID 
 {0006F03A-0000-0000-C000-000000000046} failed due to the following error: 
 80080005 Server execution failed (Exception from HRESULT: 0x80080005 
 (CO_E_SERVER_EXEC_FAILURE)).At C:\wamp\www\bizops\prepare_email.ps1:25 char:7
 + $ol = New-Object -comObject Outlook.Application
 +       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 + CategoryInfo          : ResourceUnavailable: (:) [New-Object], COMException
 + FullyQualifiedErrorId : NoCOMClassIdentified,Microsoft.PowerShell.Commands.NewObjectCommand

我的powershell代码看起来像(引起此错误的部分)

$ol = New-Object -comObject Outlook.Application 
$ns = $ol.GetNameSpace("MAPI")
$Mail = $ol.CreateItem(0)
$Mail.Recipients.Add($mail_to_list)  
$mail.Subject = $mail_subject
$mail.DeferredDeliveryTime = $deliverAt
$Mail.HTMLBody = "SOME HTML TEXT"

3 个答案:

答案 0 :(得分:1)

虽然由于错误不明确而找到解决方案需要很长时间。如果问题是由于许可错过匹配或其他原因引起的混淆。

我很高兴能够找到解决方案。

我们需要通过有效用户运行httpd(您可能希望创建一个单独的用户来运行您的任务)。 enter image description here

希望截图会清楚显示

答案 1 :(得分:1)

  

但是当我将上面的行放在批处理文件中并在PHP脚本中调用它时,

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

如果要构建在服务器端上下文中运行的解决方案,则应尝试使用已为安全无人值守执行的组件。或者,您应该尝试找到允许至少部分代码在客户端运行的替代方法。如果从服务器端解决方案使用Office应用程序,则应用程序将缺少许多成功运行的必要功能。此外,您将承担整体解决方案稳定性的风险。请在Considerations for server-side Automation of Office文章中详细了解相关内容。

作为一种解决方法,如果您只处理Exchange个人资料,可以考虑使用EWS,请参阅EWS Managed API, EWS, and web services in Exchange。或者可供Office 365用户使用的Outlook REST API,请参阅Get Started with Mail, Calendar, and Contacts REST APIs

此外,您可以考虑使用Outlook所基于的低级API - 扩展MAPI。或者只是围绕该API的任何其他第三方包装器,例如Redemption。

答案 2 :(得分:0)

CO_E_SERVER_EXEC_FAILURE很可能意味着这两个进程在不同的安全上下文中运行 - 在这种情况下,COM系统拒绝封送调用。

是否有应用程序以提升的安全权限运行(Rus As Administrator)?