fum125’s diary

IT全般に関する技術メモなど

Outlook2016 を Python から制御してみる (3)

2年ぶりの更新です。
前回、フォルダにアクセスするところまで記載しました。
今回は、フォルダ配下にあるメールにアクセスしてみます。

フォルダ配下のメールにアクセスする

前回の実験で、デフォルトの受信フォルダにはアクセスできました。
今回は、その他のフォルダへのアクセスを試してみます。

f:id:fum125:20180607231607p:plain

いま、"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 のプロパティを色々を触ってみたいと思います。