PowerShellでメールを送信する(Microsoft 365)

PowerShell

社内のメール環境はMicrosoft 365のExchange Online を利用しています。
サーバーの状況などをメールで送信したいことが多いため、Micrsoft 365 のアカウントを利用したスクリプトを作成しました。

概要

Microsoft 365 のExchange Onlineのライセンスを利用したスクリプトのサンプルですが、アカウント情報をGmailや他のものに変更しても動作すると思います。
Send-MailMessage を利用したスクリプトです。
多要素認証を利用していると動作しないかもしれません。

サンプルコード

# Microsoft 365 account
$account = "hoge1@hogehoge.co.jp"
$password = ConvertTo-SecureString "hogehogehoge" -AsPlainText -Force

# create credential 
$credential = New-Object System.Management.Automation.PSCredential ($account, $password)

# set Send-MailMessage params
$mailParams = @{
    SmtpServer                 = "smtp.office365.com"
    Port                       = "587" # or '25' if not using TLS
    UseSSL                     = $true ## or not if using non-TLS
    Credential                 = $credential
    From                       = "hoge1@hogehoge.co.jp"
    To                         = "hoge2@hogehoge.co.jp", "hoge3@hogehoge

.co.jp"
    Subject                    = "SMTP Client Submission - $(Get-Date -Format g)"
    Body                       = "This is a test email using SMTP Client Submission"
    DeliveryNotificationOption = "OnFailure", "OnSuccess"
    Encoding                   = ([System.Text.Encoding]::UTF8)
}

# send message
Send-MailMessage @mailParams

詳細

使用するアカウント情報を設定しています。
パスワードについてはプレーンテキストを利用すると警告が表示されるため、セキュリティで保護されたテキストに変換しています。その際 -AsPlainText -Force オプションは必ず指定します。

$account = "hoge1@hogehoge.co.jp"
$password = ConvertTo-SecureString "hogehogehoge" -AsPlainText -Force

PSCredential で資格情報を作成します。

$credential = New-Object System.Management.Automation.PSCredential ($account, $password)

SMTPサーバーなどのサーバー情報や送り先などのパラメーターを設定します。
使用するサーバー似合わせて Port や SSL などを設定してください。
複数宛先を設定する際は “hoge2@hogehoge.co.jp”, “hoge3@hogehoge.co.jp” のように 「,」で区切っていきます。
文字化けを防ぐため、Encoding で文字コードを設定しています。
本文中で改行したい場合は`r`nを入力します。改行コードであるCR+LFの意味です。

$mailParams = @{
    SmtpServer                 = "smtp.office365.com"
    Port                       = "587" # or '25' if not using TLS
    UseSSL                     = $true ## or not if using non-TLS
    Credential                 = $credential
    From                       = "hoge1@hogehoge.co.jp"
    To                         = "hoge2@hogehoge.co.jp", "hoge3@hogehoge.co.jp"
    Subject                    = "SMTP Client Submission - $(Get-Date -Format g)"
    Body                       = "This is a test email using SMTP Client Submission"
    DeliveryNotificationOption = "OnFailure", "OnSuccess"
    Encoding                   = ([System.Text.Encoding]::UTF8)
}

Send-MailMessage でメールを送信します。

Send-MailMessage @mailParams

おわりに

PowerShell を用いてメールを送信するスクリプトでした。
私しか使用しないPCに利用する前提のため、スクリプト内にパスワードを記述しています。複数人が利用したり、配布するような場合は、事前に作成したパスワードファイルを読み込むようにしたり、証明書を利用したりする方がセキュリティー的にもいいです。パスワードファイルを利用する手順については以下の記事を参照ください。

タイトルとURLをコピーしました