2017-04-15 104 views
0

您有需要准备Outlook电子邮件草稿并在Outlook中打开它。无法在Outlook应用程序上使用PowerShell创建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代码看起来像(节这thorows这个错误)

$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" 

回答

1

尽管找到解决方案花了这么长时间,但错误并不明显。如果问题是由于许可错过匹配或其他原因造成混淆。

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

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

希望截图将明确

0

CO_E_SERVER_EXEC_FAILURE最有可能的意思是两个pro cesses在不同的安全上下文中运行 - 在这种情况下,COM系统拒绝编组调用。

两个应用程序是否都以提升的安全权限运行(Rus以管理员身份)?

+0

嗨德米特里, 是否有任何检查两个进程是否在不同的安全上下文中运行? 你能提出解决方法吗? 谢谢 – Vijay

+0

捕获异常并处理这个特定的COM代码(0x80080005)可能是最好的方法。 –

1

但是,当我把上面的线在批处理文件并调用它在PHP脚本,

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

如果您正在构建一个在服务器端上下文中运行的解决方案,则应该尝试使用对于无人执行安全的组件。或者,您应该尝试找到允许至少部分代码运行客户端的替代方案。如果您从服务器端解决方案使用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。

+0

微软声明不在非交互式环境中使用Office。 https://support.microsoft.com/en-us/help/257757/considerations-for-server-side-automation-of-office – lit

+0

是的,你可以在我的文章中找到链接。 –

相关问题