web-dev-qa-db-ja.com

PowerShellを使用してOutlookの電子メールの下書きを作成する

作業中のプロセスを自動化するPowerShellスクリプトを作成しています。このプロセスでは、電子メールに記入して他の人に送信する必要があります。電子メールは常にほぼ同じ種類のテンプレートに従いますが、毎回同じになることはおそらくないので、Outlookで電子メールの下書きを作成し、電子メールウィンドウを開いて、送信する前に追加の詳細を入力できるようにします。

オンラインで少し検索しましたが、見つけることができるのは、メールをサイレントに送信するためのコードだけです。コードは次のとおりです。

$ol = New-Object -comObject Outlook.Application  
$mail = $ol.CreateItem(0)  
$Mail.Recipients.Add("[email protected]")  
$Mail.Subject = "PS1 Script TestMail"  
$Mail.Body = "  
Test Mail  
"  
$Mail.Send() 

つまり、新しいOutlook電子メールの下書きを作成して保存し、すぐにその下書きを開いて編集する方法を知っている人はいますか?

15
Jason
$olFolderDrafts = 16
$ol = New-Object -comObject Outlook.Application 
$ns = $ol.GetNameSpace("MAPI")

# call the save method yo dave the email in the drafts folder
$mail = $ol.CreateItem(0)
$null = $Mail.Recipients.Add("[email protected]")  
$Mail.Subject = "PS1 Script TestMail"  
$Mail.Body = "  Test Mail  "
$Mail.save()

# get it back from drafts and update the body
$drafts = $ns.GetDefaultFolder($olFolderDrafts)
$draft = $drafts.Items | where {$_.subject -eq 'PS1 Script TestMail'}
$draft.body += "`n foo bar"
$draft.save()

# send the message
#$draft.Send()
23
Shay Levy

他の回答に基づいて、コードを少しトリミングして使用しました

$ol = New-Object -comObject Outlook.Application

$mail = $ol.CreateItem(0)
$mail.Subject = "<subject>"
$mail.Body = "<body>"
$mail.save()

$inspector = $mail.GetInspector
$inspector.Display()

これにより、下書きフォルダからメールを取得するという不要な手順が削除されます。ちなみに、2つのドラフトメールの件名が同じ場合にShayLevyのコードで発生したエラーも削除されます。

24
Jason

Shay Levyの答えはほぼそこにあると思います。欠けているのは、アイテムの表示だけです。これを行うために必要なのは、関連するインスペクターオブジェクトを取得し、それ自体を表示するように指示することだけです。

$inspector = $draft.GetInspector  
$inspector.Display()

より洗練された動作については、 GetInspector のMSDNヘルプを参照してください。

5
Dan Blanchard

私もこれに追加すると思いました。基本(件名、受信者、またはその他の側面)をたくさん知っている場合は、自分で節約できるいくつかの手順があります。まず、メールのテンプレートを作成して保存します。例:どこかでコードを使って?

コード自体に関しては、他の人が投稿したものとほとんど同じです。

ジェイソンからの借り入れ:

_$ol = New-Object -comObject Outlook.Application
$msg = $ol.CreateItemFromTemplate(<<Path to template file>>)
_

必要に応じて変更します。フィールドを追加するか、本文を変更します。メッセージは、$msg.GetInspector.Display()と同じ方法で送信する前に表示できます。次に、$msg.send()を呼び出して送信します!

1
Teltrivar

hTMLテンプレートを使用する場合は、Bodyの代わりにHTMLbodyを使用してください。以下のサンプルコードを見つけてください。

$ol = New-Object -comObject Outlook.Application
$mail = $ol.CreateItem(0)
$mail.Subject = "Top demand apps-SOURCE CLARIFICATION"
$mail.HTMLBody="<html><head></head><body><b>Joseph</b></body></Html>"
$mail.save()

$inspector = $mail.GetInspector
$inspector.Display()
0
Joseph M.G.