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

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

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

【PowerShellでGUI 2】CheckBox, RadioButton
前回に続いて、今回はチェックボックスとラジオボタンについて載せておきます。 Ch ...

【PowerShellでGUI 6】DataGridView応用編 リンク表示列 & チェックボックス表示列
前回、PowerShellで作成するWindwos Formアプリの部品データグ ...