КОД PHP -:
<?php
$user = "[email protected]";
$script = "C:\\inetpub\\wwwroot\\shell_script\\sc.ps1";
$query = shell_exec("powershell -command $script <nul");
if($query)
{
echo "Successful" ;
}
else
echo "Failed";
}
?>
КОД ОБОЛОЧКИ -:
$Outlook = New-Object -ComObject Outlook.Application
$Mail = $Outlook.CreateItem(0)
$Mail.To = "[email protected]"$Mail.Subject = "New Leave Request"$Mail.Body ="Dear,
This email contains the body of Email"
$Mail.Send()
У меня на ноутбуке установлен Powershell с Windows Server 2012 на Windows 8.
У меня есть веб-сайт, размещенный на Windows Server 2012 IIS
Когда я запускаю скрипт powershell sc.ps1 в командной строке на сервере по команде ./sc.ps1, почта отправляется в Outlook.
Но когда я запускаю страницу php, на которой у меня есть команда shell_exec, почта не запускается в Outlook и возвращает страницу с сообщением Successful, как написано в PHP Code.
Вся работа выполнена на Windows Server 2012
Выполнение сценария powershell в командной строке отправляет почту, но при запуске сценария через powershell не вызывает почту и возвращает успех только при выполнении запроса shell-exec.
Я сделал set-ExecutionPolicy как неограниченный.
В настоящее время Microsoft не рекомендует и не поддерживает автоматизацию приложений Microsoft Office из каких-либо необслуживаемых, неинтерактивных клиентских приложений или компонентов (включая ASP, ASP.NET, DCOM и NT Services), поскольку Office может демонстрировать нестабильное поведение и / или или тупик, когда Office работает в этой среде.
Если вы создаете решение, которое выполняется в контексте на стороне сервера, вы должны попытаться использовать компоненты, которые были сделаны безопасными для автоматического выполнения. Или вы должны попытаться найти альтернативы, которые позволяют хотя бы части кода работать на стороне клиента. Если вы используете приложение Office из серверного решения, приложению не хватит многих необходимых возможностей для успешной работы. Кроме того, вы будете рисковать стабильностью вашего общего решения. Подробнее об этом читайте в Особенности серверной автоматизации Office статья в MSDN.
В качестве обходного пути вы можете использовать низкоуровневый API — Extended MAPI, который поддерживает такие сценарии, или просто любую другую стороннюю оболочку вокруг этого API (например, Redemption).
Вы, вероятно, должны пройти политику выполнения в вашем shell_exec
:
shell_exec("powershell -executionpolicy unrestricted -command $script <nul");
Если это не работает, вы должны проверить идентичность вашего пула приложений.
КОД PHP -:
<?php
$user = "[email protected]";
$script = "C:\\inetpub\\wwwroot\\shell_script\\sc.ps1";
$query = shell_exec("powershell -command $script <nul");
if($query)
{
echo "Successful" ;
}
else
echo "Failed";
}
?>
КОД ОБОЛОЧКИ -:
$Outlook = New-Object -ComObject Outlook.Application
$Mail = $Outlook.CreateItem(0)
$Mail.To = "[email protected]"$Mail.Subject = "New Leave Request"$Mail.Body ="Dear,
This email contains the body of Email"
$Mail.Send()
У меня на ноутбуке установлен Powershell с Windows Server 2012 на Windows 8.
У меня есть веб-сайт, размещенный на Windows Server 2012 IIS
Когда я запускаю скрипт powershell sc.ps1 в командной строке на сервере по команде ./sc.ps1, почта отправляется в Outlook.
Но когда я запускаю страницу php, на которой у меня есть команда shell_exec, почта не запускается в Outlook и возвращает страницу с сообщением Successful, как написано в PHP Code.
Вся работа выполнена на Windows Server 2012
Выполнение сценария powershell в командной строке отправляет почту, но при запуске сценария через powershell не вызывает почту и возвращает успех только при выполнении запроса shell-exec.
Я сделал set-ExecutionPolicy как неограниченный.
В настоящее время Microsoft не рекомендует и не поддерживает автоматизацию приложений Microsoft Office из каких-либо необслуживаемых, неинтерактивных клиентских приложений или компонентов (включая ASP, ASP.NET, DCOM и NT Services), поскольку Office может демонстрировать нестабильное поведение и / или или тупик, когда Office работает в этой среде.
Если вы создаете решение, которое выполняется в контексте на стороне сервера, вы должны попытаться использовать компоненты, которые были сделаны безопасными для автоматического выполнения. Или вы должны попытаться найти альтернативы, которые позволяют хотя бы части кода работать на стороне клиента. Если вы используете приложение Office из серверного решения, приложению не хватит многих необходимых возможностей для успешной работы. Кроме того, вы будете рисковать стабильностью вашего общего решения. Подробнее об этом читайте в Особенности серверной автоматизации Office статья в MSDN.
В качестве обходного пути вы можете использовать низкоуровневый API — Extended MAPI, который поддерживает такие сценарии, или просто любую другую стороннюю оболочку вокруг этого API (например, Redemption).
Вы, вероятно, должны пройти политику выполнения в вашем shell_exec
:
shell_exec("powershell -executionpolicy unrestricted -command $script <nul");
Если это не работает, вы должны проверить идентичность вашего пула приложений.
В приложении нельзя использовать приложение Office (включая Outlook) (например, IIS).
Ваши варианты
В случае Exchange Server используйте EWS получить доступ к почтовому ящику.
Расширенный MAPI (только C ++ или Delphi)
Искупление (любой язык) — он упаковывает Extended MAPI, и его семейство объектов RDO можно использовать из службы.