Outlook2016 を Python から制御してみる (1)
Python3 もインストールしたし、jupyter notebook も使えるようになったので、早速なにか作ってみます。
まずは、Outlook のメールを python から動かしてみましょうか。
(...って、少しハードルが高かったかも...)
win32com が使えるようにする
python から Outlook にアクセスするサンプルなどを調べると、 "import win32com.client" なんてのをやっています。
早速まねてみましたが、ImportError...
win32com は標準では入っていないんですね。
import win32com.client ↓ # ImportError: No module named 'win32com'
どうやら win32com (pywin32) は sourceforge から取ってくるみたい。 https://sourceforge.net/projects/pywin32/
現在最新バージョンである "Build 220" の下に行き、「windows 32bit版 pyhton3.5 用」の pywin32 をダウンロードしてきました。
ファイル名は "pywin32-220.win32-py3.5.exe"。
この入手した exe を実行すると、pywin32 がインストールされ、無事に "import win32com.client" が実行できるようになりました。
(2016.12.08補足)
現在は anaconda-4.2.0を使用していますが、anaconda には最初から win32com が同梱されていました。
sourceforge から入手しなくても、すぐに使用できます。
受信トレイまでたどり着く
Outlook で、デフォルトとして使っている受信トレイにアクセスするには、以下のソースで行けました。
import win32com.client object = win32com.client.Dispatch('Outlook.Application') mapi = object.GetNamespace('MAPI') inbox = mapi.GetDefaultFolder(6) print(inbox.Name) # 実行結果 受信トレイ
ところで、GetDefaultFolder() の引数である "6" ってなんでしょね?
調べ見ると、"6" は Outlook の受信トレイフォルダを表していて、OlDefaultFolders 列挙に定義されているようです。
(参考 https://msdn.microsoft.com/ja-jp/vba/outlook-vba/articles/oldefaultfolders-enumeration-outlook )
olFolderInbox を使ってみる
じゃあ、GetDefaultFolder(6) は、GetDefaultFolder(olFolderInbox) と書いてもいいのかな?
やってみました。
inbox = mapi.GetDefaultFolder(win32com.client.constants.olFolderInbox)
↓
AttributeError: olFolderInbox
駄目でした。
olFolderIndex が定義されていないみたいです...
これは、解決方法が分かりました!!
1. Python インストールフォルダ配下の "Lib\site-packages\win32com\client" に移動する。
私の環境では "C:\Python35\Lib\site-packages\win32com\client"。
# cd C:\Python35\Lib\site-packages\win32com\client
2. makepy.py を実行する。
# python makepy.py
3. ダイアログが表示されたら、"Microsoft Outlook XX.X Object Library (X.X)" を選択して [OK] をクリック。
(Ctrlキーを押しながら、複数選択することも可能)
4. 端末に "importing module" と表示されたら、python か ipython を起動して、import からやり直してみる。
>>> import win32com.client >>> object = win32com.client.Dispatch('Outlook.Application') >>> win32com.client.constants.__dicts__ : 'olFolderInbox': 6,
これで olFolderInbox が使えるようになりました。
補足 : olFolderIndex が使えるようにするもう1つの方法 (2016.12.08補足)
会社と自宅等の複数のPCに anaconda を入れてみましたが、環境によっては makepy.py を実行しても olFolderIndex が使えないことがありました。
makepy.py は実行できているのですが...。
その際には、たまたまかもしれませんが、以下を実行してみたら上手くいったということがありましたので、メモしておきます。
# ipython : from win32com.client from makepy : makepy.main()
ここで、使用したい項目を選択。
この後に表示される "Generating to" のパスが "AppData\Local\Temp\gen_py\3.5\数字.py" となるとうまくいくようでした。
(うまくいかないケースは、ここが __pycache__ となっていたような気が...。まだpythonの仕組みがよく理解できていないので、うろ覚えです)