PowerShellでメールを送信する方法

  • 2024.01.30
       
PowerShell で Web サイトのヘルスチェックとメール通知

本記事では PowerShell で電子メールを送信する方法を Script ファイルの作成から実行までを手順として紹介します。
また、実用編として、Web サイトのヘルスチェックに伴う障害検知メールの自動送信の実装方法も掲載しているので、よければそちらもご覧ください。

PowerShell のメール送信コマンドレットは≪Send-MailMessage≫です。このコマンドレットを利用してPowerShellからメールを送信します。
それでは早速解説していきます。

PowerShellでメールを送信する方法

前提条件

  • メール送信可能な SMTP サーバを保有していること
  • PowerShell Script の実行が必要となるため対象マシンの ExecutionPolicy が RemoteSigned になっていること

もし ExecutionPolicy 設定前であれば管理者権限で PowerShell を起動し以下のコマンドを実行しましょう。

Set-ExecutionPolicy RemoteSigned

実行可能環境

Windows PowerShell が実行可能な OS Version であれば、Windows10 や Windows Server どちらでも使用可能です。

あなたのご希望に沿った案件が必ず見つかります
【フリーランス向け】高収入好待遇の案件をご紹介

TECH MANIA フリーランス

≫まずは簡単60秒で無料お問い合わせから≪

手順

1. メール送信用スクリプトファイルを作成する。

「mail_send.ps1」ファイルを任意の場所で作成してください。
Script の内容は以下のサンプルコードの各パラメータの値を環境に則したものへ変更したものを記述しましょう。

以下のコードをコピペし、メール送信用 SMTP サーバーや生存確認を行うサイトのドメインを変更すれば動作します。

$MailParam = @{
        SmtpServer = "<SMTP サーバドメイン>";
        From = "<送信元メールアドレス>";
        To = "<送信先メールアドレス>";
        Subject = "<件名>"
        Body = "<本文>"
        Encoding = [System.Text.Encoding]::UTF8
      }
      Send-MailMessage @MailParam

各パラメータの概要を以下に記載しておきますので、設定の参考にご利用ください。
必須でないパラメータは必要に応じて追加してください。

*smtp IP アドレス または SMTP サーバ のドメイン
*from 送信元アドレス
*to 送信先アドレス
cc Cc 送信先アドレス
bcc 非公開送信先アドレス
*subject 件名
*body 本文
port SMTP ポート
Encoding 文字コードの指定
※環境に応じて適宜設定が必要ですが、一般的な環境であれば UTF8 を指定していれば問題ありません。

* ・・・必須パラメータ

2. 実際にメールを送信してみる。

手順1で作成した ps1 ファイルを PowerShell から実行するか、エクスプローラ上から ps1 ファイルをダブルクリックで開くことでシェルスクリプトが実行されます。
設定した内容でメールが送信されることを確認してください。

非常に短い手順でしたが、メール送信は非常に簡単に実現できますね。

最後に、実用編として Web サイトのヘルスチェックを行った際に正常値である response code200 以外が web サイトから返却された際に自動で通知メールを送信するといった実装を行う場合の例をご紹介します。

PowerShell で Web サイトのヘルスチェックとメール通知

$urls = @(
  "https://xxx.com/",
  "http://yyy.com/"
)
for ($i = 0; $i -lt $urls.Length; $i++){
    $request = curl $urls[$i]
    $responseCode = $request.StatusCode
    if( $responseCode -eq 200 ) {
      # 正常時の処理があればここに
    } else {
      # 想定していない response code の場合の処理をここに
      $MailParam = @{
        SmtpServer = "<SMTP サーバドメイン>";
        From = "<送信元メールアドレス>";
        To = "<送信先メールアドレス>";
        Subject = $urls[$i] + ":health checker server error"
        Body = "response failer - url : " + $urls[$i] + "`n Correspondence contents : `n The server may be down."
        Encoding = [System.Text.Encoding]::UTF8
      }
      Send-MailMessage @MailParam
    }
}

いかがでしたでしょうか。
更に踏み込むと、エラーの検知は手動ではなく自動で行ってくれるようにしたいですよね。
ps1 ファイルを自動で定期実行する方法も記載しておきますので、よろしければそちらもご覧ください。

補足:自動で定期実行する方法

自動化をする場合、Windows であれば「タスクスケジューラ」が便利です。
Linux であれば cron と聞くと馴染みのある方もいらっしゃるのではないでしょうか。
タスクスケジューラの登録方法は以下の記事で公開しております。
Web サイトの生存確認を行う PowerShell Script を紹介しておりますので、PowerShell を本手順で登録してみてはいかがでしょうか。

https://techmania.jp/blog/windows0001/
     

Windowsカテゴリの最新記事