記事内にはプロモーションが含まれています

【Python】Outlookでのメール送信を自動化!添付や複数宛先もコード付きで解説

【Python】Outlookでのメール送信を自動化!添付や複数宛先もコード付きで解説 Python

毎日の業務で発生する「メール送信」作業。定型文を送ったり、日報を提出したり、ファイルを添付して関係者に一斉送信したりと、意外と時間を取られている方も多いのではないでしょうか。

もし、これらの作業をボタン一つで、あるいは決まった時間に自動で実行できたら便利ですよね。

Pythonを使えば、普段お使いのOutlookデスクトップアプリを操作して、メール作成から送信までを完全に自動化することが可能です。

この記事では、Pythonを使ってOutlookからメールを送信する基本的な方法から、添付ファイルの追加、複数人への一斉送信(TO/CC/BCC)、さらにはHTML形式での装飾といった応用テクニックまで、現在の最新環境に合わせて徹底解説します。

【本記事の信頼性】
プロフィール
執筆者:マヒロ
  • 執筆者は元エンジニア
  • SES⇒大手の社内SE⇒独立
  • 現在はこじんまりとしたプログラミングスクールを運営
  • モットーは「利他の精神」

PythonでOutlookを操作するための準備

PythonからWindows上のOutlookアプリケーションを操作するには、pywin32 というライブラリを使用するのが一般的です。

これは、Windowsの機能をPythonから呼び出すための強力なツールで、Outlookに限らずExcelやWordの操作にも応用できます。

まずは、開発環境を整えるところから始めましょう。

ライブラリ「pywin32」のインストール

コマンドプロンプトやターミナルを開き、以下のコマンドを実行してライブラリをインストールしてください。

pip install pywin32

このライブラリを導入することで、PythonからOutlookのオブジェクト(メールアイテムなど)を生成・操作できるようになります。

なお、この方法はWindows環境かつOutlookデスクトップアプリがインストールされていることが前提となります。

【基本】Outlookでメールを送信するスクリプト

まずは、最もシンプルな形で「件名」と「本文」を設定し、特定の相手にメールを送るプログラムを作成してみましょう。

全体の流れとしては、「Outlookを起動(接続)」し、「メールアイテムを作成」し、「各項目を設定」して、「送信」するというステップになります。

基本的なメール送信コード

import win32com.client

def send_outlook_email():
    # Outlookアプリケーションのオブジェクトを取得
    outlook = win32com.client.Dispatch("Outlook.Application")
    
    # 新しいメールアイテムを作成(0はメールアイテムを表す定数)
    mail = outlook.CreateItem(0)
    
    # 宛先、件名、本文の設定
    mail.To = "test-user@example.com"
    mail.Subject = "Pythonからのテストメール"
    mail.Body = "このメールはPythonスクリプトから自動送信されました。\n\n確認をお願いします。"
    
    # メールを表示(送信前に確認したい場合)
    mail.Display(True)
    
    # メールを送信(確認せずに送る場合はコメントアウトを外す)
    # mail.Send()

if __name__ == "__main__":
    send_outlook_email()

このソースコードについて詳しく解説します。

まず、win32com.client.Dispatch("Outlook.Application") でOutlookアプリケーション自体を操作するための準備をします。

すでにOutlookが起動している場合はそのプロセスに接続し、起動していない場合はバックグラウンドで立ち上げます。

次に outlook.CreateItem(0) で新規メール作成画面を呼び出します。引数の 0 は「メール」を表しており、ここを変えることで予定表(アポイントメント)なども作成可能です。

mail.Tomail.Subjectmail.Body にそれぞれ宛先、件名、本文を文字列として代入します。
本文中の \n は改行コードです。

最後に mail.Display(True) で作成されたメール画面をポップアップ表示させています。
いきなり送信するのが不安な場合は、このように一度表示させて目視確認するのがおすすめです。
自動化する場合は mail.Send() を使用して即座に送信します。

【応用】添付ファイルを付けて送信する方法

業務メールでは、PDFやExcelなどのファイルを添付する機会も多いはずです。

Pythonを使えば、指定したパスにあるファイルを自動的にメールに添付することができます。

添付ファイル追加のコード例

import win32com.client
import os

def send_email_with_attachment():
    outlook = win32com.client.Dispatch("Outlook.Application")
    mail = outlook.CreateItem(0)
    
    mail.To = "target@example.com"
    mail.Subject = "【資料送付】月次レポート"
    mail.Body = "お疲れ様です。\n月次レポートを添付いたします。\nご確認ください。"
    
    # 添付ファイルのパス(絶対パスで指定することを推奨)
    attachment_path = os.path.abspath("monthly_report.xlsx")
    
    # ファイルが存在するか確認してから添付
    if os.path.exists(attachment_path):
        mail.Attachments.Add(attachment_path)
    else:
        print("添付ファイルが見つかりませんでした。")
        return

    mail.Display(True)
    # mail.Send()

if __name__ == "__main__":
    send_email_with_attachment()

このソースコードのポイントは mail.Attachments.Add() メソッドです。

引数にファイルのパスを渡すことで、メールにファイルを添付します。

ここで注意が必要なのが、ファイルパスは「絶対パス」で指定するのが確実という点です。os.path.abspath() を使うことで、相対パスを絶対パスに変換しています。

また、ファイルが存在しない場合にエラーにならないよう、os.path.exists() で事前チェックを入れるのが実務的なコードの書き方です。

【応用】複数人(CC・BCC)に一斉送信する方法

チームメンバーへのCCや、関係者へのBCCなど、複数人にメールを送りたい場合の設定方法を解説します。

Outlookの仕様では、宛先は「セミコロン ; 」で区切るのが一般的です。

複数宛先・CC・BCCの設定コード

import win32com.client

def send_email_multiple():
    outlook = win32com.client.Dispatch("Outlook.Application")
    mail = outlook.CreateItem(0)
    
    # 複数の宛先(セミコロンで区切る)
    to_list = ["user1@example.com", "user2@example.com"]
    mail.To = ";".join(to_list)
    
    # CCの設定
    mail.CC = "manager@example.com"
    
    # BCCの設定
    mail.BCC = "archive@example.com"
    
    mail.Subject = "複数人への一斉送信テスト"
    mail.Body = "各位\n\n本メールは一斉送信テストです。"
    
    mail.Display(True)

if __name__ == "__main__":
    send_email_multiple()

このコードでは、Pythonのリスト to_list に複数のメールアドレスを格納し、";".join(to_list) を使ってセミコロン区切りの文字列に変換しています。

これにより、宛先が何人増えてもリストに追加するだけで対応できるようになります。

mail.CC および mail.BCC プロパティも同様に、文字列でアドレスを指定するだけで簡単に設定可能です。

HTML形式や重要度の設定など実用テクニック

テキスト形式だけでなく、文字色を変えたりリンクを貼ったりできる「HTML形式」での送信や、メールの重要度設定など、より高度な操作も可能です。

HTML形式でメールを作成する

import win32com.client

def send_html_email():
    outlook = win32com.client.Dispatch("Outlook.Application")
    mail = outlook.CreateItem(0)
    
    mail.To = "customer@example.com"
    mail.Subject = "キャンペーンのお知らせ"
    
    # HTML形式の本文
    # HTMLBodyプロパティを使用する
    mail.HTMLBody = """
    <h2>キャンペーンのご案内</h2>
    <p>いつもご利用ありがとうございます。</p>
    <p>詳細は<a href="https://example.com">こちら</a>をご覧ください。</p>
    <p style="color: red;">※本メールは重要なお知らせです。</p>
    """
    
    # 重要度の設定(2: 高, 1: 通常, 0: 低)
    mail.Importance = 2
    
    mail.Display(True)

if __name__ == "__main__":
    send_html_email()

HTMLメールを送る場合は、mail.Body ではなく mail.HTMLBody プロパティを使用します。
ここにHTMLタグを含んだ文字列を代入することで、Webページのようなリッチなメールを作成できます。

また、mail.Importance プロパティに 2 を設定することで、Outlook上で「重要(!」マーク)」が付いた状態で送信されます。
緊急の連絡などに役立ちます。

うまくいかない時のチェックポイント

コードは正しいはずなのに動かない、エラーが出るといった場合、以下の点を確認してみてください。

Outlookが起動していない、または認証が必要

win32com は、PCにインストールされているOutlookアプリを裏側で操作します。

そのため、Outlookの初期設定が完了していなかったり、プロファイルが正しく読み込めていないとエラーになることがあります。

一度Outlookアプリを手動で起動し、送受信ができる状態か確認しましょう。

セキュリティ警告が出る場合

企業のセキュリティポリシーによっては、外部プログラム(Python)からOutlookを操作しようとすると「プログラムが電子メールメッセージを送信しようとしています」という警告ポップアップが出ることがあります。

これはOutlookのセキュリティ機能によるものです。

頻繁に出る場合は、Outlookの「トラストセンター(セキュリティセンター)」の設定で「プログラムによるアクセス」の項目を確認するか、ウイルス対策ソフトが最新かつ有効な状態(警告が出ない条件)になっているか確認し、必要であればシステム管理者に相談してください。

Pythonのスキルを活かして年収を上げる方法

以上、PythonでOutlookでのメール送信を自動化する方法について解説してきました。

なお、Pythonのスキルがある場合には、「転職して年収をアップさせる」「副業で稼ぐ」といった方法を検討するのがおすすめです。

Pythonエンジニアの需要は非常に高いため、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。

なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。

今すぐ転職する気がなくとも、とりあえず転職エージェントに無料登録しておくだけで、スカウトが届いたり、思わぬ好待遇の求人情報が送られてきたりするというメリットがあります。

併せて、副業案件を獲得できるエージェントにも登録しておくと、空いている時間を活かして稼げるようなPythonの案件を探しやすくなります。

転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。