【PowerShell】CSVファイルのデータを読み込んでメールを一括送信する方法

【PowerShell】CSVファイルのデータを読み込んでメールを一括送信する方法 PowerShell

PowerShellを使えば、CSVファイルに記載された宛先や件名、本文をもとに、一人ひとりに自動でメールを送信することが可能です。営業メールやリマインド通知など、定型文を多数の相手に送る業務を自動化したい場合に非常に有効です。

この記事では、CSVファイルを読み込んでOutlookからメールを一括送信する方法を紹介します。

CSVファイルの準備

まずは送信対象の情報を以下のような形式でCSVファイルにまとめておきます。ファイル名は「mail_list.csv」とします。

Email,Subject,Body
user1@example.com,ご案内①,本文①です。
user2@example.com,ご案内②,本文②です。
user3@example.com,ご案内③,本文③です。

列名は「Email」「Subject」「Body」で、それぞれ宛先・件名・本文を記載します。

PowerShellスクリプトの例

次に、CSVを読み込んで1行ずつメールを送信するスクリプトを用意します。

# OutlookのCOMオブジェクトを作成
$Outlook = New-Object -ComObject Outlook.Application

# CSVを読み込む
$csv = Import-Csv -Path "C:\path\to\mail_list.csv" -Encoding UTF8

foreach ($row in $csv) {
    $Mail = $Outlook.CreateItem(0)
    $Mail.To = $row.Email
    $Mail.Subject = $row.Subject
    $Mail.Body = $row.Body
    $Mail.Send()  # 下書きに保存したい場合は .Display() に変更
}

ファイルパスは環境に応じて変更してください。また、$Mail.Send()$Mail.Display() にすると送信前に確認できます。

実行時の注意点

以下の点に注意してスクリプトを実行してください。

  • Outlookがインストールされ、ログイン済みであること
  • セキュリティポリシーにより自動送信が制限されている場合があります
  • 大量送信時はOutlook側で送信制限がかかる可能性があります

応用:個別カスタマイズ付きの本文

本文に相手の名前や案件名などを埋め込む場合、CSVに追加列を設け、-fReplace() を使って動的に本文を生成することが可能です。

Email,Name,Subject,Body
user1@example.com,田中様,ご案内,こんにちは、{Name} 本文です。

本文の {Name} を変換する例:

$body = $row.Body.Replace("{Name}", $row.Name)

まとめ

PowerShellとCSVを組み合わせることで、メールの一括送信を柔軟に自動化できます。宛先管理と定型文の切り替えをCSVで行うことで、誤送信リスクも抑えながら効率的なメール配信が実現できます。

業務で定期的に同じような連絡を行う場合は、今回のようなスクリプトをテンプレート化しておくと非常に便利です。