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

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

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

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

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