スクリプト処理でエラーが発生した場合や処理結果を通知するためにコマンドでもメールを送信したいことがあります。一番シンプルにPowerShellでメールを送信する方法を紹介します。宛先を複数指定することも可能です。
ちなみに、PowerShellでGmailを使ってメールを送信する方法は以下で紹介しています。
-
【PowerShell】Gmailを送信するスクリプト
タイトルの通りですが、PowerShellを使ってGmail送信するスクリプトを作ったのでメモします。 バックアップなどの処理結果を、Gmailで通知できたらよいなぁと思って用意したもの。宛先を引数に ...
PowerShellでメールを送信する方法
PowerShell の メール送信コマンドレットは Send-MailMessage です。このコマンドレットを利用してメール送信する方法を紹介します。
1 2 3 4 5 6 7 8 9 10 |
$ToADDR = "to@example.com" # 宛先メールアドレス $FromADDR = "from@example.com" # 送信元メールアドレス $SMTPSV = "mail.example.com" # SMTPサーバホスト名(IPアドレス) $PortNum = "587" # SMTPサーバポート番号 $Subject = "テスト件名" # メール件名 $MailBody = "テスト本文1`r`n" # メール本文 $MailBody += "テスト本文2`r`n" # $MailBody += "テスト本文3" # Send-MailMessage -To $ToADDR -From $FromADDR -SmtpServer $SMTPSV -Port $PortNum -Subject "$Subject" -Body $MailBody -Encoding UTF8 |
以下が、ポイントとなるところです。
本文が複数行となる場合は改行を使う(↑だとみずらいですが、r と n の前はバッククォーテーションです)
本文の2行目以降は加算代入演算子(+=)を利用してつなげていく
Send-MailMessageコマンドで件名の変数$Subjectを指定するときはダブルコーテーションでくくっています。
これは件名にスペースが含まれていると、コマンド実行時に変数が展開されてスペースが引数の終わりだと認識されてしまうことを防ぐため。なので、件名にスペースが含まれていない場合は関係ないですが、含まれている場合はくくらないとエラーとなるので注意しましょう。
文字化けする場合は、-Encoding UTF8 を指定しましょう。
宛先が複数の場合の指定方法
メールを送信する宛先が複数ある場合は以下のようにカンマ区切りで指定できます。
1 |
$ToADDR = "to01@example.com","to02@example.com" |
ちなみにCcを利用したい場合は、オプション -Cc で指定できます。
Bcc を利用したい場合も同じく、オプション -Bcc で指定できます。
続いて、応用編を紹介します。
メール送信処理をFunction化
一回のバッチ処理などで、処理結果に応じてメールを自動送信させたり させたくなかったり したいときがあると思います。以下のように関数にすることで、スクリプトをきれいにかくことができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# メール送信 Function Send_mail { $ToADDR = "to@example.com" $FromADDR = "from@example.com" $SMTPSV = "mail.example.com" $PortNum = "587" Send-MailMessage -To $ToADDR -From $FromADDR -SmtpServer $SMTPSV -Port $PortNum -Subject "$Subject" -Body $MailBody -Encoding UTF8 } # 件名・本文を出力 $Subject = "テスト件名" $MailBody = "テスト本文1`r`n" $MailBody += "テスト本文2`r`n" $MailBody += "テスト本文3" # メール送信 Send_mail |
ポイントとしては、メール件名と本文のみ関数には含めないことです。こうすることで、何度もメール送信部分の処理だけ使いまわすことができます。
まとめ
スクリプト処理で自動化しているにもかかわらず処理が失敗していることに気づけないと困ったことになりますね。例えば、バックアップがとれていなかった、、、などはよく聞く話なので、チェックの処理を含めてメールで通知できるようにしておきたいです。
おまけ
ファイルを添付して送信したい場合は、オプション -Attachments で添付できるようです。
プライオリティなんかも指定できるみたいですね。(オプション -Priority)
また、Linuxで同じようにmailコマンドで送信する方法は以下の記事でまとめています。
-
mailコマンドでSMTPサーバを指定してメール送信する方法
スクリプトのエラー判定後や処理結果を通知するために、mailコマンドでメールを送信したいことがあります。 スクリプトを実行するサーバでメールサーバを動かしていればよいですが、そうでないときは、SMTP ...
以上です。
↓↓↓ 持っていると便利な一冊 ↓↓↓