Windows10:Windows PowerShellを利用して電子メールを送信する

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

そのため、電子メールを送信したい場合の選択肢としては、電子メールを送信するスクリプトファイルを作成することになります。

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

動作環境

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

ソフトウェア バージョン
Windows10 Professional 64bit 1809

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

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

「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)

あとがき

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

おすすめコンテンツ:
トップへ戻る