業務効率化・自動化の事例として、PythonでOutlookを操作してフォルダ名やメール本文を取得する方法を解説します。
Pythonスクリプトを実行するPCにOutlookがインストールされている必要があります。
使用ライブラリ・モジュール
PythonでOutlookを操作するには pywin32
ライブラリを使用します。
その他のWindowsアプリケーションもこのライブラリで操作できます。
・関連記事:PythonでPowerpointファイル(pptx)をPDFに変換する
インストール:必要
インストール:必要
インストール:不要
インストール
pip
コマンドでpywin32
,pandas
ライブラリをインストールします。
・関連記事:Pythonライブラリのインストール(pipの使い方)
Successfully installed ・・・・と表示されればインストールは成功です。(依存関係のある他のライブラリも同時にインストールされます。)
Outlookからメール情報を取得
受信トレイのフォルダ名とメッセージ数を取得
受信トレイにTestA, TestBのフォルダが存在している構成で、フォルダ名と保存されているメッセージ数を取得します。GetDefaultFolder()
の引数はMicrosoft公式ドキュメントを参照してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import win32com.client outlook = win32com.client.Dispatch('Outlook.Application').GetNamespace('MAPI') inbox = outlook.GetDefaultFolder(6) #受信トレイは「6」を指定 #受信ボックスの情報を取得 print('Name: ' + inbox.name) print('Count: ' + str(len(inbox.Items))) #受信ボックスのフォルダを取得 folders = inbox.Folders for folder in folders: print('Name: ' + folder.name) Folder = folders(folder.name) print('Message: ' + str(len(Folder.Items))) #Name: 受信トレイ #Count: 151 #Name: TestA #Count: 262 #Name: TestB #Count: 169 |
メールを取得
受信トレイにあるフォルダを指定して、受信日時・送信元アドレス・件名・メール本文の取得を行い項目毎に整理します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import win32com.client import pandas as pd outlook = win32com.client.Dispatch('Outlook.Application').GetNamespace('MAPI') inbox = outlook.GetDefaultFolder(6) # 受信トレイのフォルダ情報を取得 folders = inbox.Folders # TestAフォルダのアイテムを取得 messages = folders('TestA').Items # 空のデータフレームを作成 df_mail = pd.DataFrame() # メッセージ内容を順次取得してデータフレームに追加 i = 0 for message in messages: df_mail.loc[i,"receivedtime"] = pd.to_datetime(str(message.ReceivedTime)[:-6]) df_mail.loc[i,"sender"] = str(message.Sender) df_mail.loc[i,"subject"] = str(message.Subject) df_mail.loc[i,"body"] = str(message.body) i +=1 |
ReceivedTime
は '2021-12-12 03:26:43+00:00'
のようなtimezone付きのデータになるため、str(message.ReceivedTime)[:-6]
として後方6文字のtimezone情報を削除してからpd.to_datetime
でPandas Series
型に変換しています。
・参考記事:PandasでSeries, DataFrameを作成する
df_mail
は以下のようなデータフレームになります。
データフレームをExcelに書き込む方法は以下の記事を参考にしてください。
・参考記事:pandasでExcelファイルの書き込み(to_excel)
指定した時間帯のメールを抽出
データフレームの日時データをset_index
でインデックスに指定することで、簡単に日時範囲指定による抽出ができます。
1 2 3 4 5 6 7 8 9 10 11 | # 受信日時をインデックスに指定 df_mail.set_index('receivedtime', inplace=True) # 日付範囲指定(指定日以降) df_mail.sort_index().loc['20211225':] # 日付範囲指定(指定日範囲) df_mail.sort_index().loc['20211220':'20211221'] # 時間範囲指定(指定時刻範囲) df_mail.between_time('8:00:00', '9:00:00') |
PythonでOutlookを操作してメールを取得する方法を解説しました。
ぜひ活用して業務効率化を進めてください。
Pythonでの自動化事例として以下の記事も参考にしてみてください。
・関連記事:Pythonでメールを自動送信する
・関連記事:PythonでPowerpointファイル(pptx)をPDFに変換する
・関連記事:PythonでPDFのテキストを抽出する(PyMuPDF)