2022-04-01
PowershellでSend-MailMessageを用いてメールを送信する方法
SMTPの設定ができているか確認を行うため、WindowsのPowershellを使ってメールを送信という機会がありました。その時に使用した方法を紹介します。
実行用コマンドの作成
今回はMicrosoft Office365のメールアカウント、送信サーバを使用します。
環境:Windows10
アカウントの状態を確認
SMTP認証が有効になっているか確認します。
Microsoft365管理センターにログインし、使用するユーザーをクリックして選択状態にします。右側にユーザの設定画面が表示されます。メニューから「メール」を選択し、更に「メールアプリを管理する」を選択。
チェックボックスが並んでいますが、「認証済みSMTP」が有効になっていることを確認します。
送信コマンド
# ①
# 件名とメール本文
$subject = "件名:テストメール"
$body = "これはWindows PowerShellから送信されたメールです。"
# メール送信用パラメータの定義
$mail = @{
from = "sendfrom@example.onmicrosoft.com";
to = "sendto@example.co.jp";
smtp_server = "smtp-mail.outlook.com";
smtp_port = 587;
user = "sendfrom@example.onmicrosoft.com";
password = "**********";
}
# ②
$encoding = ([System.Text.Encoding]::UTF8);
$password = ConvertTo-SecureString $mail["password"] -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential $mail["user"], $password
# ③
# メールの送信
Send-MailMessage -To $mail["to"] `
-From $mail["from"] `
-SmtpServer $mail["smtp_server"] `
-Subject $subject `
-Body $body `
-Credential $credential `
-Port $mail["smtp_port"] `
-UseSsl `
-Encoding $encoding
# メッセージの表示
Write-Host "メールの送信が完了しました."
上記のパラメータを適宜読み替えて入力してください。PowerShellの画面にまるっと貼り付けてエンターキーを押すと送信処理が実行されます。
受信アドレス側でメールが確認できました。
解説
①件名、本文、メール送信用のパラメータを定義
見やすくするため、一度変数として切り出しました。SMTP送信に必要となる情報を配列にまとめています。
# ①
# 件名とメール本文
$subject = "件名:テストメール"
$body = "これはWindows PowerShellから送信されたメールです。"
# メール送信用パラメータの定義
$mail = @{
from = "sendfrom@example.onmicrosoft.com";
to = "sendto@example.co.jp";
smtp_server = "smtp-mail.outlook.com";
smtp_port = 587;
user = "sendfrom@example.onmicrosoft.com";
password = "**********";
}
Microsoft Office365メールプロバイダの設定内容については下記をご確認ください。
https://support.microsoft.com/ja-jp/office/pop-imap-smtp-%E3%81%AE%E8%A8%AD%E5%AE%9A-8361e398-8af4-4e97-b147-6c6c4ac95353
②文字コード、認証情報の設定
メールの文字コードを指定します。UTF8のほか、UTF7、ASCIIなどを選択可能です。
AsPlainText
とForce
パラメーターは必須です。これらのパラメーターを指定しないと警告メッセージが表示されます。セキュリティで保護された文字列にプレーンテキストを使用しているためです。
セキュリティで保護された文字列を作成し、PSCredential()
メソッドで資格情報オブジェクトを作成します。
# ②
$encoding = ([System.Text.Encoding]::UTF8);
$password = ConvertTo-SecureString $mail["password"] -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential $mail["user"], $password
③メールの送信
Send-MailMessage
関数でメールを送信します。配列と変数に格納した値を使います。直接埋め込むより、コードが見やすく保守性が高いですね。
# ③
# メールの送信
Send-MailMessage -To $mail["to"] `
-From $mail["from"] `
-SmtpServer $mail["smtp_server"] `
-Subject $subject `
-Body $body `
-Credential $credential `
-Port $mail["smtp_port"] `
-UseSsl `
-Encoding $encoding
# メッセージの表示
Write-Host "メールの送信が完了しました."
まとめ
以上が基本的なコマンドですが、Send-MailMessage
コマンドのオプションで様々な設定が可能です。CC
やBCC
などの指定も可能です。興味のある方はいろいろと試してみてください。
https://docs.microsoft.com/ja-JP/previous-versions//dd347693(v=technet.10)