Outlook2016 を Python から制御してみる (3)
2年ぶりの更新です。
前回、フォルダにアクセスするところまで記載しました。
今回は、フォルダ配下にあるメールにアクセスしてみます。
フォルダ配下のメールにアクセスする
前回の実験で、デフォルトの受信フォルダにはアクセスできました。
今回は、その他のフォルダへのアクセスを試してみます。
いま、"folderA" の下には2件のメールがあるという想定です。
(テスト用に、 "下書きメール" 2件を置いています)
まずは "folderA" にアクセスする。
前回までのおさらいで、まずは "folderA" にアクセスします。
import win32com.client object = win32com.client.Dispatch('Outlook.Application') mapi = object.GetNamespace('MAPI') inbox = mapi.GetDefaultFolder(6) foldera = inbox.Folders['folderA'] print(foldera.Name) # -> "folderA"
これで、変数 foldera は "folderA" を指していることが確認できました。
次に、Items を使って、folderA 配下にあるアイテムを取得してみます。
items = foldera.Items print(len(items)) # -> 2
folderA 配下には2個のアイテムがあるぞ、ということが分かりました。
フォルダの下には何がある?
フォルダの下にあるもの。
今回は "メール" であることは明白ですが、もしかしたらフォルダには "会議出席依頼" が入っているかもしれません。
会議出席依頼を "メール" (MailItem) クラスとして扱うと異常終了することがあったので、念のためにメールであることを確認しておきます。
アイテムの種別の説明に2つのサイトが見つかりましたが、どっちの見方をすればいいのでしょう?
(a) https://msdn.microsoft.com/ja-jp/vba/outlook-vba/articles/olitemtype-enumeration-outlook
(b) https://msdn.microsoft.com/ja-jp/VBA/Outlook-VBA/articles/olobjectclass-enumeration-outlook
実験では、"メール" のアイテムに対して "43" という数値が得られたので、(b) の方法を利用するようにしました。
foldera = inbox.Folders['folderA'] items = foldera.Items for item in items: print(item.Class) #-> メールの場合は 43 が得られた。 if (item.Class == 43): print("これはMailItemです") else: print("それ以外")
MailItem のプロパティを表示してみる
フォルダの下にあるアイテムが "MailItem" であることが分かったら、次は MailItem の色々なプロパティを表示してみたり、値を上書きしてみたりします。
MailItem のプロパティ一覧は、ここを参考にしました。
https://msdn.microsoft.com/ja-jp/vba/outlook-vba/articles/mailitem-object-outlook
試しに、サブジェクト一覧を表示してみます。
for item in items: print(item.Subject) #-> 各メールのサブジェクトが表示されます。 ※ 事前のクラスチェックは省略。すべて MailItem だという前提にしています。
「参照しかできないもの」「上書きできるもの」などプロパティごとに異なるので、注意が必要ですね。
次回は、MailIem のプロパティを色々を触ってみたいと思います。