Send-MailMessageコマンドレットでPowerShellからメールを送信する方法
SMTPサーバー経由でメールを送信するには、PowerShellのSend-MailMessageコマンドレットを使用します。この組み込みコマンドレットはPowerShell 2.0以降で利用可能です(それ以前のバージョンでは、.NETのSystem.Net.Mailクラスを使ってメールを送信していました)。この記事では、Send-MailMessageを使ってPowerShellスクリプトからメールを送信する方法を詳しく解説します。
Send-MailMessageの構文
コマンドレットの構文を確認するには、次のコマンドを実行します。
get-help Send-MailMessage
Send-MailMessage [-To] <String[]> [-Subject] <String> [[-Body] <String>] [[-SmtpServer] <String>] [-Attachments <String[]>] [-Bcc <String[]>] [-BodyAsHtml] [-Cc <String[]>] [-Credential <PSCredential>] [-DeliveryNotificationOption {None | OnSuccess | OnFailure | Delay | Never}] [-Encoding <Encoding>] -From <String> [-Port <Int32>] [-Priority {Normal | Low | High}] [-UseSsl] [<CommonParameters>]主なパラメータ
- -From: 送信者(差出人)のメールアドレス。SMTPサーバーが送信者アドレスを検証せず匿名送信を許可している場合は、実際に存在するアドレスである必要はなく、任意のアドレス名義でメールを送ることができます。
- -To: 受信者のメールアドレス。
- -SmtpServer: メール送信に使用するSMTPサーバーのアドレス。
なお、環境変数$PSEmailServerにメールサーバーのアドレスを設定しておけば、Send-MailMessageコマンドレットでSMTPサーバーアドレスを指定する必要はありません。
基本的な送信例
次のシンプルなPowerShellコマンドは、指定した件名と本文のメールを複数の受信者に送信します。
Send-MailMessage -From 'ps-script@woshub.com' -To 'serveradmin@woshub.com','helpdesk@woshub.com' -Subject "Test Email Alert" -Body "This is email body text" –SmtpServer 'smtp.woshub.com'
パラメータの編集や管理をしやすくするために、送信コマンドは次のように複数行で記述することもできます。
Send-MailMessage `
-SmtpServer smtp.woshub.com `
-To 'serveradmin@woshub.com','helpdesk@woshub.com' `
-From 'ps-script@woshub.com' `
-Subject "Test" `
-Body "Sending email using PowerShell" `
-Encoding 'UTF8'
文字エンコーディングに注意
上記の最後のコマンドでは、追加でUTF8エンコーディングを指定しています。これを指定しないと、件名や本文にANSI以外の文字(日本語など)が含まれる場合に文字化けが発生します。
Windows PowerShellではデフォルトでANSIおよびASCIIエンコーディングが使用されます。一方、PowerShell Core(PowerShell 6以降)にアップグレードしている場合は、デフォルトですでにUTF-8が使用される点に留意してください。
暗号化された接続(SSL/TLS)の使用
デフォルトでは、Send-MailMessageコマンドレットは標準のSMTPポートTCP 25経由でメールを送信しようとします。SMTPサーバーが暗号化されたプロトコルでのみ送信を許可している場合は、ポート番号(通常は465または587)と-UseSslオプションを指定します。
-SmtpServer 'smtp.woshub.com' -Port 465 –UseSsl
以下の表は、PowerShellからメール送信に利用できる主要なパブリックメールプロバイダーのSMTPサーバー設定です(アカウント側の設定画面でSMTP送信を許可しておく必要がある点にご注意ください)。
| プロバイダー名 | SMTPサーバーアドレス | ポート | 暗号化方式 |
| Gmail | smtp.gmail.com | 587 / 25 / 465 | TLS / TLS / SSL |
| Office 365 | smtp.office365.com | 587 | TLS |
| Outlook.com | smtp-mail.outlook.com | 587 | TLS |
| Yahoo | smtp.mail.yahoo.com | 587 | TLS |
| iCloudメール | smtp.mail.me.com | 587 | TLS |
| AOL | smtp.aol.com | 465 | SSL |
SMTP認証(-Credentialオプション)
SMTPサーバーが匿名での送信を禁止している(リレーが拒否される)場合、次のようなエラーが表示されます。
5.7.1 Client was not authenticated.
この場合は、-Credentialオプションを使ってSMTPサーバー上で認証を行います。対話形式でユーザー資格情報を入力して認証することもできます。
Send-MailMessage …… -Credential (Get-Credential)
また、認証に使用するアカウントを変数に格納しておくことも可能です。
$cred = Get-Credential
Send-MailMessage ... -Credential $cred
パスワードをスクリプト内に直接記述する場合
SMTPサーバーへの接続用パスワードをPowerShellスクリプト内に直接保存したい場合は、次のような構文を使用します。
$mypasswd = ConvertTo-SecureString "smP@ssdw0rrd2" -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ("user1@woshub.com", $mypasswd)
Send-MailMessage ... –Credential $mycreds
なお、資格情報を安全に扱う方法については、「PowerShellスクリプトで保存済み資格情報を安全に利用する方法」の記事も参考にしてください。
添付ファイル付きHTMLメールの送信例
メールに添付ファイルを追加するには、-Attachmentsオプションを使用します。以下の例では、HTML形式のメールを送信し、ローカルディスクからfile1.txtとinstall.logを添付しています。GmailのSMTPサーバーを使用する場合、事前にGmailでアプリパスワードを作成し、Gmailのパスワードの代わりにそのアプリパスワードをSMTP認証に使用する必要があります。
$MailMessage = @{
To = "admin@woshub.com"
Bcc = "manager@woshub.com", "manager2@woshub.com"
From = "smtpsender1@gmail.com"
Subject = "DC Server Report"
Body = "<h1>Welcome!</h1> <p><strong>Generated:</strong> $(Get-Date -Format g)</p>"
Smtpserver = "smtp.gmail.com"
Port = 587
UseSsl = $true
BodyAsHtml = $true
Encoding = "UTF8"
Attachment = "C:\Logs\file1.txt", "C:\Logs\install.log"
}
Send-MailMessage @MailMessage -Credential $cred
Gmailのインターフェースでは、添付ファイル付きのHTML形式メールは次のように表示されます。
配信通知(開封確認)の設定
-DeliveryNotificationOptionパラメータを使用すると、メールの配信通知(読み取り確認)を設定できます。配信通知を有効にすると、受信者がメールを受け取ったかどうかを把握できるようになります。
利用可能な通知タイプは以下の通りです。
- OnSuccess: 配信が成功した場合に通知
- OnFailure: 配信が失敗した場合に通知
- Delay: 配信が遅延した場合に通知
-
Macの標準メールアプリで暗号化メールを送信する方法【S/MIME証明書の取得から設定まで】
通常、メールのやり取りはプロバイダーがセキュリティを管理しているため、比較的安全なものとされています。しかし、メールの暗号化は利用しているメールサービスによっては対応していない場合もあります。より強固にメールを守りたいなら、自分のメールアプリで暗号化機能を使うのがおすすめです。 Macユーザーであれば、標準搭載されている「メール」アプリだけで暗号化メールを送信できます。この記事では、その設定方法と使い方を詳しく解説します。 macOSに内蔵されたメールアプリは、送信前にメール内容を暗号化することが可能です。ただし、この暗号化を行うには、事前にMacへメール用のデジタル証明書をインストールして
-
Excelのリストからメールを一括送信する2つの効果的な方法
大勢の人に一括メールを送りたいとき、繰り返し作業を素早く処理できる自動化の仕組みが必要になります。メールアドレスの一覧をまとめたExcelファイルを作成するのが、一括メール送信の最も一般的な方法です。このチュートリアルでは、Excelのリストから多数の相手へ自動的にメールを送信する方法を、2つのアプローチで詳しく解説します。 Excelリストからメールを送信する2つの便利な方法 下の画像には、氏名・メールアドレス・登録番号を含むデータセットが用意されています。このExcelリストから、それぞれの相手に個別のメールを送信していきます。そのために、まずMicrosoft Wordの差し込み印刷機能