Windows 10のPowerShellで電子メールを送信する方法

Windows 10のPowerShellで電子メールを送信する方法

Windows 8以降の「タスクスケジューラ」には、タスクの操作として「電子メールの送信(非推奨)」を選択できるものの、タスクの設定を保存しようとすると、以下のような画面が表示され、実質、電子メールの送信機能は利用できなくなっています。

Windows 10のPowerShellで電子メールを送信する方法

そのため、タスクスケジューラ上のタスクなどで、電子メールを送信したい場合、電子メールを送信する処理をスクリプトファイルなどで自作する必要があります。

そこでここでは、PowerShellの「Send-MailMessage」コマンドレットを使って、電子メールを送信するスクリプトを作成する方法を紹介します。

この記事は、以下の環境での動作結果を基にしています。他のエディションやバージョンでは、動作結果が異なる場合があることをご了承ください。

ソフトウェア バージョン
Windows 10 Pro 64bit 1809

電子メールを送信するスクリプト

「Windows PowerShell」のバージョン2までは、.NetFrameworkの「SMTPClient」クラスを利用するのが一般的でしたが、現在ではPowerShellのコマンドレット「Send-MailMessage」を利用して電子メールを送信するのが、お手軽ではないでしょうか。

以降では、GmailのSMTPサーバーを使って電子メールを送信する場合の手順を紹介しています。

Send-MailMessageの使い方

下のスクリプトをメモ帳などに貼り付けて、拡張子を「ps1」にして保存することで、メール送信するスクリプトファイルとして利用できます。

$MailSv = "smtp.gmail.com"
$Port = 587
$Encode = "UTF8"
$User = "<Googleアカウント名>"
$Pwd = "<アプリパスワード>" | ConvertTo-SecureString -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential $User,$Pwd

$From = "$User"
$To = "<宛先メールアドレス>"
$Subject = "メール送信テストです。"
$Body = @"
このメールは、テストです。
正しく表示されていますか?
"@

Send-MailMessage -To $To -From $From -SmtpServer $MailSv -Credential $Cred -UseSsl -Encoding $Encode -Port $Port -Subject $Subject -Body $Body

上のスクリプトの中で、最低限以下の変数を設定すればメール送信が可能になります。

$User - Googleアカウント名を入力します。

$Pwd - Googleアカウントのアプリパスワードを入力します。

$To - 宛先のメールアドレスを入力します。

$Subject - 件名を入力します。

$Body - 「@"」と「"@」の間に、本文を入力します。(改行も可能です)

コマンドレットに指定可能なパラメータなど、詳しい情報は以下のサイトをご覧ください。

Send-MailMessage - Microsoft Docs

「SMTPClinet」を利用する方法

ちなみに、SMTPClientクラスを利用した方法は、次のようになります。

$SMTPServer="smtp.gmail.com"
$Port="587"
$SMTPClient=New-Object Net.Mail.SmtpClient($SMTPServer,$Port)
$SMTPClient.EnableSsl=$true
$User="<Googleアカウント名>"
$Pwd="<アプリパスワード>"
$SMTPClient.Credentials=New-Object Net.NetworkCredential($User,$Pwd)

$From="$User"
$To="<宛先メールアドレス>"
$Subject = "メール送信テストです。"
$Body = @"
このメールは、テストです。
正しく表示されていますか?
"@
$MailMassage=New-Object Net.Mail.MailMessage($From,$To,$Subject,$body)
$SMTPClient.Send($MailMassage)

あとがき

ここでは、本文にテキストメッセージを直接入力していますが、状況に応じて必要な情報を記載するようカスタマイズすれば、より使い勝手がよくなると思います。