无法使用php脚本发送powershell电子邮件到outlook使用iis windows server 2012


Unable to send powershell email using php script to outlook using iis windows server 2012

错误-:

New-Object:为CLSID组件检索COM类工厂{0006F03A-0000-0000-C000-000000000046}失败,原因如下错误:80010001呼叫被对方拒绝。(来自HRESULT的例外:0 x80010001 (RPC_E_CALL_REJECTED))。在D: ' get-process。诗篇1:5 char:12 +$Outlook = New-Object -ComObject Outlook。应用+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:ResourceUnavailable:(:) [New-Object], COMExcept +FullyQualifiedErrorId:NoCOMClassIdentified Microsoft.PowerShell。Comman ds。NewObjectCommand不能在空值表达式上调用方法。在D: ' get-process。ps1:6 char:1 + $Mail = $Outlook.CreateItem(0) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidOperation: (:)[], RuntimeException + fulllyqualifiederrid: InvokeMethodOnNull在此对象上找不到属性"To"。验证属性存在并可设置。在D: ' get-process。ps1:8 char:1 + $Mail="美元的用户名 " + ~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:InvalidOperation:(:) [], RuntimeException + fulllyqualifiederrid:属性'Subject'无法在此找到对象。验证该属性是否存在并且可以设置。在D: ' get-process。ps1:9 char:1 + $Mail。主题="新休假申请"+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidOperation:(:) [], RuntimeException + fulllyqualifiederrid: PropertyNotFound在此对象上找不到属性"Body"。验证属性存在并且可以设置。在D: ' get-process。Ps1:10 char:1 +美元的邮件。身体= " $用户名 " + ~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:InvalidOperation:(:) [], RuntimeException + fulllyqualifiederrid:不能在空值表达式上调用方法。在D: ' get-process。ps1:12 char:1 + $Mail.Send() + ~~~~~~~~~~~~ +CategoryInfo: InvalidOperation:(:) [], RuntimeException +fulllyqualifiederrid: InvokeMethodOnNull你好devang_gaur@outlook.com

get-process.php -:

<?php
    $username = "devang_gaur@outlook.com";
    $psScriptPath = "D:''get-process.ps1";
    $query = shell_exec("powershell -command $psScriptPath -username '$username'< NUL");
    echo $query;
?>

get-process。ps1):

param(
[string]$username
)
$Outlook = New-Object -ComObject Outlook.Application
$Mail = $Outlook.CreateItem(0)
$Mail.To = "$username"
$Mail.Subject = "New Leave Request"
$Mail.Body = "$username"
$Mail.Send()
Write-Output "Hello $username <br />"

get-process.php为IIS Windows Server 2012根目录wwwroot下的php文件,触发PowerShell脚本get-process.ps1Get-process.ps1包含发送邮件的脚本

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

如果您正在构建一个在服务器端上下文中运行的解决方案,那么您应该尝试使用那些对于无人值守执行是安全的组件。或者,您应该尝试找到至少允许部分代码在客户端运行的替代方案。如果从服务器端解决方案使用Office应用程序,则该应用程序将缺乏成功运行所需的许多功能。此外,您将在整个解决方案的稳定性方面承担风险。请参阅Office服务器端自动化的注意事项一文了解更多信息。

相反,您可以考虑使用Outlook所基于的低级API - Extended MAPI。或者围绕该API的任何其他包装器,例如,Redemption。