【2023年】これからブログを始める人へおすすめの書籍

Kissy

PowerShellでメールを送信する

作成: 更新:

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