【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
関連記事

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

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

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

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

【PowerShellでGUI 7】DataGridView 応用編2 画像表示列
前回に引き続き、、PowerShellで作成するWindwos Formアプリの ...