2017-04-15 46 views
0

Outlookの電子メール草案を準備してOutlookで開く必要があります。Outlookアプリケーションでpowershellを使用してOutlook電子メールの草案を作成できません

私は、outlookメソッドを呼び出して電子メールを作成するpowershellに供給変数を実行するPHPフォームを作成しました。それは完璧に動作

C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe C:\wamp\www\bizops\prepare_email.ps1 >> C:\wamp\www\bizops\log.log 

以下のように私はPowerShellを実行

しかし、私は、バッチファイルに上記の行を置き、PHPスクリプトでそれを呼び出す、

$mail_string="c:\WINDOWS\system32\cmd.exe /c START C:\wamp\www\bizops\outlook_mail.bat"; 
exec($mail_string); 

それは私のPowerShellのコードは、(節たthorowsのように見えるエラー

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 

の下に私を与えますこのエラー)

$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は、最も可能性の高い2のプロを意味し、 cessesは異なるセキュリティコンテキストで実行されています.COMシステムはこの場合、呼び出しをマーシャリングすることを拒否します。

どちらのアプリも高いセキュリティ特権(Rus As Administrator)で動作していますか?

+0

ハイドミトリー 2つのプロセスが異なるセキュリティコンテキストで実行されているかどうかを確認する方法はありますか。 これを修正する方法を提案できますか? ありがとう – Vijay

+0

例外をトラップし、この特定のCOMコード(0x80080005)を処理するのがおそらく最良の方法です。 –

1

しかし、私は、バッチファイルに上記の行を配置し、

Microsoftは現在、お勧めしません、PHPスクリプトでそれを呼び出すと、していない場合Officeがこの環境で実行されたときにOfficeが不安定な動作やデッドロックを発生する可能性があるため、無人で非対話型のクライアントアプリケーションまたはコンポーネント(ASP、ASP.NET、DCOM、NTサービスなど)からMicrosoft 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を使用しないことに関するMicrosoftの声明。 https://support.microsoft.com/en-us/help/257757/considerations-for-server-side-automation-of-office – lit

+0

ええ、私のポストのリンクを見つけることができます。 –

関連する問題