【问题标题】:Unable to create outlook email draft using powershell on Outlook application无法在 Outlook 应用程序上使用 powershell 创建 Outlook 电子邮件草稿
【发布时间】:2017-04-16 08:08:17
【问题描述】:

您好需要准备 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"

【问题讨论】:

    标签: php powershell outlook


    【解决方案1】:

    尽管由于错误不清楚,所以花了很长时间才找到解决方案。如果问题是由于权限未匹配或其他原因造成的,则会出现混淆。

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

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

    希望截图能说明清楚

    【讨论】:

      【解决方案2】:

      但是当我将上面的行放在一个批处理文件中并在 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。

      【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 嗨 Dmitry,是否有任何方法可以检查这两个进程是否在不同的安全上下文中运行?你能建议解决这个问题的方法吗?谢谢
      • 捕获异常并处理这个特定的 COM 代码 (0x80080005) 可能是最好的方法。
      猜你喜欢
      • 2010-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-01
      • 1970-01-01
      • 2019-06-29
      相关资源
      最近更新 更多