【PowerShell】Start-Processでメール送信画面を起動
背景
PowerShellのスクリプトの中からメールを送るだけであれば、Send-MailMessageコマンドを使えばよいのですが、
- 送信前にメールの内容を表示して
- 必要に応じて適宜修正してから送信
という要件があり、その対応として、
所定の内容(宛先、件名、本文)をセットしたうえで、メール送信画面を開く
をゴールとすることにしました。
実現方法
色々調べて見つけた情報が、
Start-Processコマンドを使えば、Windowsの関連付けに従ってアプリケーションを起動することができる
ということ
例えば、Start-Process "C:\Temp\Sample.txt"
等とすれば、txt に関連付けられたアプリケーション(メモ帳など)で当該のファイルを開くことができます。
ということは、
mailto:のリンクをパラメータとしてStart-Processを実行すれば、目的が達成できるのは?
結論
目論見通り、実現することができました。
サンプルのソースを以下に載せておきます。
# UrlEncodeを関数化 function UrlEncoding([string]$inputString){ return ([System.Web.HttpUtility]::UrlEncode($inputString)).Replace('+','%20') } # 変数定義 $Subject = "テストメール" $MailTo = "test@test.com" $MailCc = "cc@test.com" $Body = @() $CrLf = "`r`n" for ($i = 1; $i -le 10; $i++) { $Body += "メール本文 $i 行目" } $MailBody = ($Body -join $CrLf) # mailto のリンク形式の文字列を生成 $EncodeTxt = 'mailto:' + $MailTo + '?cc=' + $MailCc + ` '&subject=' + (UrlEncoding($Subject)) + ` '&body=' + (UrlEncoding($MailBody)) # メーラー起動 Start-Process $EncodeTxt
簡単な解説
mailto: のリンク書式についての説明は割愛します。
最初の function UrlEncoding の部分は、2byte文字をSystem.Web.HttpUtilityのUrlEncodeを用いてエンコードしている部分ですが、半角スペースが + にエンコードされてしまうため、それを %20 に置換する処理を追加しています。
また、メールの本文については CR+LF の改行コードを含めた文字列にしてからエンコードする必要があるため、1行ずつを配列に格納したものを、CR+LFで結合するという作りにしてあります。
上記のソースを実行すると、例えば、mailtoのリンクでChromeを起動するように設定し例れば、下記の様にGmailでメール送信画面が起動します。

このような要件はニッチかもしれませんが、参考になれば幸いです。
PowerShell,SEmailto:,PowerShell,Send-MailMessage,Start-Process,メーラー起動,メールソフト起動,メールテンプレート,メール送信画面起動
Posted by Remi Papa
関連記事

【PowerShellでGUI 4】ComboBox
PowerShellで作成するWindwos Formアプリの部品のうち、今回は ...

【PowerShellでGUI 8】ProgressBar
ものすごく久々の投稿になってしまいました。PowerShellで作成するWind ...

【Zabbix】Windows Updateの有無を監視
Zabbixで監視対象のWindows ServerにWindows Updat ...

【PowerShellでGUI 5】DataGridView
PowerShellで作成するWindwos Formアプリの部品のうち、今回は ...

Power Shellでメール送信
Power Shellでメール送信をするには、 Send-MailMessag ...