社内のメール環境は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
おすすめ書籍
どこでもインターネットで調べることができますが、社内のセキュリティーポリシーでインターネットを利用できない場所で作業することもありますし、ネットワークトラブルで使用できないこともありますので、買って損はしない一冊です。
Windowsコマンドプロンプトポケットリファレンス
Windows PowerShell ポケットリファレンス
おわりに
PowerShell を用いてメールを送信するスクリプトでした。
私しか使用しないPCに利用する前提のため、スクリプト内にパスワードを記述しています。複数人が利用したり、配布するような場合は、事前に作成したパスワードファイルを読み込むようにしたり、証明書を利用したりする方がセキュリティー的にもいいです。パスワードファイルを利用する手順については以下の記事を参照ください。