アナログな作業を自動化したい
私の日常業務の中に、Outlookで受信したメール中の「問い合わせ番号」「問い合わせタイトル」「URL」「受信日」などを、サーバーに格納されている管理表(Excel)に書き写すという超アナログな作業があります。
この作業をなんとか自動化できないかと思い、まず手始めにOutlookで受信したメールをPythonで読み込むことを行います。
色々と調べてみましたが、あまり情報がなく試行錯誤しながらどうにかできましたので、備忘録も兼ねて情報を残しておきます。
(私の家のOfficeはとても古くてOutlook2007です…。おそらく最新のOfficeでも同じだとは思いますが、うまくいかない場合はご容赦ください。)
最終的なコードはとてもシンプルです。
PythonでOutlookのメールを読み込む
前提
前提として私のOutlookのメールフォルダはこのようになっています。
大きく言うと、
- 個人用フォルダ
- Yahooメールのフォルダ
があり、その中がさらにいくつかのフォルダに分かれています。
今回は**「2. Yahooメールのアカウントフォルダ 」の「受信トレイ」のメール**を読み込みたいとします。
フォルダの読み込み
outlookを操作するためにwin32com.clientをimportする必要があります。
私はAnacondaを使っていますが、特に追加でインストールしなくてもimportできました。
import win32com.client
次にOutlookのオブジェクトを作成します。
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
このoutlookというオブジェクトはFoldersという属性を持っていて、これが「1. 個人用フォルダ」「2. Yahooメールのアカウントフォルダ」に対応しています。
accounts = outlook.Folders
for account in accounts:
print(account)
結果
個人用フォルダ
**********@yahoo.co.jp
このaccountというのはさらにFoldersという属性を持っていて、これがさらに下の階層のフォルダに対応しています。
ここまでをまとめると
print("root (アカウント数=%d)" % accounts.Count)
for account in accounts:
print("└ ",account)
folders = account.Folders
for folder in folders:
print(" └ ",folder)
実行結果
root (アカウント数=2)
└ 個人用フォルダ
└ 削除済みアイテム
└ 受信トレイ
└ 送信トレイ
└ 送信済みアイテム
└ 予定表
└ 連絡先
└ 履歴
└ メモ
└ 仕事
└ 下書き
└ RSS フィード
└ 迷惑メール
└ **********@yahoo.co.jp
└ 受信トレイ
└ Bulk Mail
└ Draft
└ Sent
└ Trash
以外にシンプルですね。
メールの読み込み
最終的に得られたfolderの中に実際のメールが入っているわけですが、このfolderはItemsという属性を持っていて、これが「メール」に対応しています。
Itemsで得られるメールはイテラブルオブジェクトになっているのでfor文で1つずつ取り出します。
mails = folder.Items
for mail in mails:
print("件名: " ,mail.subject)
print("差出人: %s [%s]" % (mail.sendername, mail.senderEmailAddress))
print("受信日時: ", mail.receivedtime)
print("未読: ", mail.Unread)
print("本文: ", mail.body)
属性 | 意味 |
---|---|
mail.subject | 件名 |
mail.sendername | 差出人名 |
mail.senderEmailAddress | 差出人のメールアドレス |
mail.receivedtime | 受信日時 |
mail.body | 本文 |
mail.Unread | 未読フラグ |
するとこんな感じでメールの内容が取得できていることがわかります。
件名: これはテストです
差出人: *** [*******@gmail.com]
受信日時: 2020-05-30 07:17:33+00:00
未読: False
本文: ちゃんと受け取れてますか?
まとめ
最後にコードをまとめておきます。
import win32com.client
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
accounts = outlook.Folders
print("root (アカウント数=%d)" % accounts.Count)
for account in accounts:
print("└ ",account)
folders = account.Folders
for folder in folders:
print(" └ ",folder)
mails = folder.Items
for mail in mails:
print("-----------------")
print("件名: " ,mail.subject)
print("差出人: %s [%s]" % (mail.sendername, mail.senderEmailAddress))
print("受信日時: ", mail.receivedtime)
print("未読: ", mail.Unread)
print("本文: ", mail.body)
実行結果
root (アカウント数=2)
└ 個人用フォルダ
└ 削除済みアイテム
└ 受信トレイ
└ 送信トレイ
└ 送信済みアイテム
└ 予定表
└ 連絡先
└ 履歴
└ メモ
└ 仕事
└ 下書き
└ RSS フィード
└ 迷惑メール
└ **********@yahoo.co.jp
└ 受信トレイ
-----------------
件名: これはテストです
差出人: *** [*******@gmail.com]
受信日時: 2020-05-30 07:17:33+00:00
未読: False
本文: ちゃんと受け取れてますか?
プログラムをexeファイルにするには
Pythonのプログラムをexeファイルにしたい場合にはこちらをご覧ください。
【自動化】Pythonコードをexeファイル化する
https://qiita.com/konitech913/items/6259f13e057bc25ebc23