PHP代码-:
<?php
$user = "email@outlook.com";
$script = "C:\\inetpub\\wwwroot\\shell_script\\sc.ps1";
$query = shell_exec("powershell -command $script <nul");
if($query)
{
echo "Successful" ;
}
else
echo "Failed";
}
?>POWERSHELL代码-:
$Outlook = New-Object -ComObject Outlook.Application
$Mail = $Outlook.CreateItem(0)
$Mail.To = "email2@outlook.com"
$Mail.Subject = "New Leave Request"
$Mail.Body ="
Dear,
This email contains the body of Email"
$Mail.Send()我在笔记本电脑上安装了Powershell,Windows 8上安装了Windows 2012。
我有一个托管在Windows 2012 IIS上的网站
当我通过命令./sc.ps1在服务器的命令行上运行powershell脚本sc.ps1时,邮件将发送到Outlook。
但是,当我运行具有shell_exec命令的php页面时,邮件不会被触发到outlook并返回消息成功的页面,就像PHP中所写的那样。所有工作都是在Windows 2012上完成的
在命令行上运行powershell脚本的发送邮件,但通过powershell运行脚本时不会触发邮件,只在shell-exec查询运行时才返回成功。
我将set-ExecutionPolicy设置为无限制的。
发布于 2015-07-27 15:00:01
Microsoft目前不建议也不支持来自任何无人值守、非交互式客户端应用程序或组件(包括ASP、ASP.NET、DCOM和NT服务)的Microsoft应用程序的自动化,因为在此环境中运行Office时,Office可能会出现不稳定的行为和/或死锁。
如果您正在构建在服务器端上下文中运行的解决方案,则应尝试使用已为无人值守执行而安全的组件。或者,您应该尝试找到允许至少部分代码运行客户端的替代方案。如果您使用来自服务器端解决方案的Office应用程序,则该应用程序将缺乏许多成功运行所需的功能。此外,您将承担风险与您的整体解决方案的稳定性。请参阅MSDN中的办公服务器端自动化的几点思考文章中有关这一点的更多信息。
作为解决办法,您可以使用支持此类scenarious的低级别API扩展MAPI,或者仅使用围绕该API的任何其他第三方包装器(例如,救赎)。
发布于 2015-07-27 14:39:03
您可能必须在shell_exec中传递执行策略:
shell_exec("powershell -executionpolicy unrestricted -command $script <nul");如果这不起作用,您应该检查应用程序池的标识。
https://stackoverflow.com/questions/31656044
复制相似问题