【Python/wim32com】GetDefaultFolderのindexを確認する(Outlook操作)

TIPS

こんにちは。ざわかける!のざわ(@zw_kakeru)です。
業務自動化の一環でpythonを使ってOutlookメールの操作をしようとした時に、GetDefaultFolderのインデックス(index)に何を指定すればいいか分からなかったのでその調べ方と結果のTipsです。

動作環境

python: 3.8.3

やったことと結果

Outlookの送信トレイに入っているメールをpythonで処理したい時のお話です。

win32com.clientモジュールをimportし、その中のGetDefaultFolderメソッドに引数としてインデックス(整数)を指定することで、そのインデックスに該当するフォルダにアクセスできるみたいです。

すると当然、「じゃあ何番がどのフォルダに対応しているんだ」という話になるので引き続き調べてましたが、Outlook.GetDefaultFolder(6)ばっかり出てきて、他のインデックスの情報が全然出てきませんでした。
どうやら6はInbox(受信トレイ)で確定らしく、世の多くの方々は受信トレイに対してスクリプトを実装するみたいなので、そこだけ分かれば十分なのでしょう(気持ちは分かります)。

しかし私は送信トレイの方をイジりたかったのと、「6が受信トレイ」ってだけだと知識として汎用性が無さすぎると思ったので、他の全てのインデックスには何が定義されているのか自分で調べてみました。

具体的には、適当にスクリプトを書いて実行しました。

import win32com.client
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
for i in range(100):
	try:
		box = outlook.GetDefaultFolder(i)
		name = box.Name
		print(i, name)
	except:
		pass


0から99までの整数をインデックスとし、その数字に該当するフォルダがある場合はprintされるようになっています。
特に難しいところも無いですね。

実行してみたところ、私の環境の場合は次のような結果になりました。

 3 削除済みアイテム
 4 送信トレイ
 5 送信済みアイテム
 6 受信トレイ
 9 予定表
 10 連絡先
 11 ジャーナル
 12 メモ
 13 タスク
 14 アラーム
 15 アラーム
 16 下書き
 17 重複
 19 重複
 20 同期の問題
 21 ローカルの失敗
 22 サーバーの失敗
 23 迷惑メール
 25 RSS フィード
 26 メッセージの追跡処理
 28 To Do バーのタスク リスト
 31 クイック操作設定
 33 Contact Search 1
 35 {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
 36 {YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY}
 37 元のファイルを変更すると、アイテム内に変更が反映されます。
 38 元のファイルを変更すると、アイテム内に変更が反映されます。
 39 アーカイブ

35、36はアルファベットと数字の組み合わせによる謎の文字列でした。
細部は人によって違いそうなので上のスクリプトを使って自分で調べてみてください。

終わりに

どのインデックスがどのフォルダなのか、調べてもパッと出てこないってどういうことなんだってばよ、、、
この情報・調べ方はまたこの先の人生で何度か必要になってくる予感がしているので、メモとして残しておきます。

とかいうこの記事を書いているうちに、この件に関するmicrosoftの公式ドキュメントの記述を見つけてしまいました、、、

まあ自分で調べれる方がええやん!公式ドキュメントに無い数字もあるし!

はい。今回は以上です。

タイトルとURLをコピーしました