メールで届いた添付ファイルを、Pythonで取得する方法を紹介します。
今回は、WindowsのクラシックOutlookを対象に、受信トレイのメールから添付ファイルを取得し、PCのフォルダに保存します。

Outlookに届いたメールって、Pythonから直接扱えるんだ?

クラシックOutlookなら、pywin32を使ってメールや添付ファイルを操作できるよ
今回の準備
Outlookの操作には pywin32 を使用します。事前にインストールが必要です。
python -m pip install pywin32
Pythonコード
以下が、今回使用するコードです。
from pathlib import Path
import win32com.client
# 添付ファイルの保存先
save_folder = Path(__file__).resolve().parent / "請求書"
# Outlook受信トレイに接続
outlook = win32com.client.gencache.EnsureDispatch("Outlook.Application")
inbox = outlook.GetNamespace("MAPI").GetDefaultFolder(win32com.client.constants.olFolderInbox)
# 対象フォルダのメールを順番に処理
for mail in inbox.Items:
# 添付ファイルを取得して保存
attachment = mail.Attachments.Item(1)
file_name = Path(attachment.FileName).name
save_path = save_folder / file_name
attachment.SaveAsFile(str(save_path))
コードポイント
① Outlookに接続する
win32com.client.gencache.EnsureDispatch("Outlook.Application")
PythonからクラシックOutlookを操作するために、pywin32 ライブラリを使用しています。
EnsureDispatch() を使うことで、Outlookのオブジェクトを取得し、メールやフォルダを操作できます。
② 受信トレイのメールを取得する
GetDefaultFolder(win32com.client.constants.olFolderInbox)
このコードで、Outlookの既定の受信トレイを取得します。
③ 添付ファイルを取得して保存する
attachment = mail.Attachments.Item(1)
メールの添付ファイルを取得します。
Outlookの Attachments コレクションは1から始まるため、Item(1) で最初の添付ファイルを取得できます。

0ではなく1から始まるので注意
取得した添付ファイルは、次のコードで指定したフォルダに保存します。
attachment.SaveAsFile(str(save_path))
SaveAsFile() は、Outlookの添付ファイルを指定したパスに保存するメソッドです。
今回は、Pythonファイルと同じ場所にある「請求書」フォルダへ保存しています。
まとめ
今回は、Pythonの pywin32 を使って、クラシックOutlookの指定フォルダから添付ファイルを取得する方法を紹介しました。
メールの取得と添付ファイルの保存を組み合わせることで、毎回手動でダウンロードする作業の効率化につなげられます。


