Windows PowerShellでメール送信

 Windows PowerShellでメール送信するスクリプトを書いてみました。
 @ITの「[運用]Windows PowerShellコマンド&スクリプティング入門(後編)」を参考にしました。
 
 .NET Frameworkのクラスを用いているのですが、そもそも私プログラマしていたのは10年以上前で、なおかつWindows系のプログラミングはほぼやったことがない。Googleで色々と調べたりしましたが、クラスライブラリの説明はMSDNにあります。ここをまず確認するべきでした。
 
 以下、スクリプトです。
 「★★★」のところには適切な値を入れてください。
 
# --------------------------------------------------
# 各種設定
# --------------------------------------------------
 
# メール情報。宛先は;で複数記載することが可能となる。
$smtp = “★★★” #SMTPサーバ(必須項目)
$targets = @(“★★★”,”★★★”) #送信先(必須項目・複数指定可能)
$from = “★★★” #送信元(必須項目)
$replyTo = “★★★” #ReplyTo先(オプション項目。一つだけ設定。NullでもOK)
$bcc = “★★★” #BCC先(オプション項目。一つだけ設定。NullでもOK)
 
# メールサブジェクトと本文。
$subject = “★★★”
# 本文はヒアドキュメントで記載。
$body = @”
★★★
★★★
★★★
“@
 
# --------------------------------------------------
# メール送信処理
# --------------------------------------------------
 
# New-Opjectコマンドレットで.NETクラスをインスタンス化。
$mail = New-Object Net.Mail.MailMessage
$mail.From = $from
$mail.ReplyTo = $replyTo
$mail.Subject = $subject
$mail.Body = $body
 
# エンコーディング。System.Text.Encodingの静的メンバにアクセスするため::を用いている。
$mail.SubjectEncoding = [Text.Encoding]::GetEncoding(“ISO-2022-JP”)
$mail.BodyEncoding = [Text.Encoding]::GetEncoding(“ISO-2022-JP”)
 
# To設定。複数設定可能。
foreach($to in $targets){ $mail.To.Add($to) }
 
# Bcc設定。設定なしも可。
if($bcc -ne “”){ $mail.BCC.Add($bcc) }
 
# ReplyTo設定。設定なしも可。
if($replyTo -ne “”){ $mail.ReplyTo = $replyTo }
 
# New-Opjectコマンドレットで.NETクラスをインスタンス化。
$sc = New-Object Net.Mail.SmtpClient($smtp)
# 送信。
$sc.Send($mail)
$mail.Dispose()


 

One Reply to “Windows PowerShellでメール送信”

  1. # New-Opjectコマンドレットで.NETクラスをインスタンス化。
     
    の部分で以下をしています
     
    $mail.ReplyTo = $replyTo
     
    が、その後、下の方で
     
    if($replyTo -ne ""){ $mail.ReplyTo = $replyTo }
     
    としてますよね。
    二重で指定していますし、$replyToがNull(空文字)の場合は上部の設定でエラーが発生してしまいます。
    従って、上部の「$mail.ReplyTo = $replyTo」は不要だと思われます。

Leave a Reply

Your email address will not be published. Required fields are marked *