PowerShellでメールを送信する
この記事ではPowerShellでメールを送信する方法を記載します。PowerShellで行った処理の結果をメールで送信したい場合があります。PowerShellでもメール送信は簡単に行えます。
メールを送信する
メールを送信する場合、SMTPサーバーの設定が必要になります。SMTPサーバー名、ポート番号、SSLの使用の有無をあらかじめ設定します。
また、SMTPサーバーでは認証が必要となるため、アカウント名とパスワードも必要になります。
# SMTPサーバーの設定
$smtp_server = "smtp.hoge.com" # SMTPサーバー名
$smtp_port = 587 # SMTPポート番号
$smtp_ssl = $true # SSLを使う
# メールアカウントの設定
$user_name = "hoge@hoge.com" # ユーザー名
$user_password = "password" # パスワード
# メールの内容
$mail_from = $user_name # 送信者
$mail_to = "fuga@fuga.com" # 宛先
$mail_subject = "テストメール" # 件名
$mail_body = "テストメール本文"
# メールメッセージオブジェクトを作成する
$message = New-Object Net.Mail.MailMessage($mail_from, $mail_to, $mail_subject, $mail_body)
# SMTPサーバーに接続し、メールを送信する
$smpt_client = New-Object Net.Mail.SmtpClient($smtp_server, $smtp_port)
$smpt_client.EnableSsl = $smtp_ssl
$smpt_client.Credentials = New-Object System.Net.NetworkCredential($user_name,$user_password);
$smpt_client.Send($message)
エラー発生時の対処方法
文字化けする
PowerShellの文字コードはデフォルトでUTF-16が使用されます。PowerShellスクリプトをUTF-8で保存している場合、メールの件名や本文に日本語を使用すると文字化けします。その場合はPowerShellスクリプトをUTF-16で保存しなおしてください。メール送信をする本スクリプトに限らず、PowerShellスクリプトはUTF-16で保存するのが基本です。
また、外部ファイルから取得した文字列をメールの件名や本文に使用している場合、外部ファイルがUTF-16以外のエンコードで保存されていると文字化けが発生する場合があります。そのような場合は、「System.Text.Encoding」を使用してエンコードをUTF-16に変換するとよいでしょう。
$enc = [System.Text.Encoding]::UTF16
$str_utf8 = "UTF8エンコードの文字列"
$str_utf16= $enc.GetBytes($str_utf8)
Gmailに送信できない
GmailはGoogleアカウントの設定で、
- 2段認証を有効にする
- アプリパスワードを追加する
を行う必要があります。また、PowerShellスクリプト内のアカウントのパスワードには、Googleアカウントのパスワードではなく、追加したアプリパスワードを使用する必要があります。
最後まで読んでいただきありがとうございます。
また読んでくださいませ。
そんじゃーね。
関連記事
SPONSORED LINK
SPONSORED LINK