4

MicrosoftのCDO(Collaboration Data Objects)を使用して、プログラムでOutlookメールボックスからメールを読み取り、埋め込まれた画像の添付ファイルを保存しています。Win32拡張機能を使用してPythonからこれを実行しようとしていますが、CDOを使用する任意の言語のサンプルが役立ちます。

これまでのところ、私はここにいます...

次のPythonコードは、メールボックス内の最後の電子メールを読み取り、添付ファイルの名前を出力し、メッセージ本文を出力します。

from win32com.client import Dispatch

session = Dispatch('MAPI.session')
session.Logon('','',0,1,0,0,'exchange.foo.com\nbar');
inbox = session.Inbox
message = inbox.Messages.Item(inbox.Messages.Count)

for attachment in message.Attachments:
    print attachment

print message.Text

session.Logoff()

ただし、添付ファイル名は「zesjvqeqcb_chart_0」のようなものです。メールソース内に、次のような画像ソースリンクが表示されます:<IMG src = "cid:zesjvqeqcb_chart_0">

それで、このCID URL(または他のもの)を使用して実際の画像を抽出し、ローカルに保存することは可能ですか?

4

1 に答える 1

5

OS/Outlook/CDO のバージョンの違いが混乱の原因となる可能性があるため、WinXP/Outlook 2007/CDO 1.21 で動作させるための手順を次に示します。

  • CDO 1.21をインストール
  • win32com.client をインストール
  • C:\Python25\Lib\site-packages\win32com\client\ ディレクトリに移動し、次を実行します。
python makepy.py
  • リストから「Microsoft CDO 1.21 Library (1.21)」を選択し、[OK] をクリックします。
C:\Python25\Lib\site-packages\win32com\client>python makepy.py
C:\Python25\lib\site-packages\win32com\gen_py\3FA7DEA7-6438-101B-ACC1-00AA00423326x0x1x33.py に生成
タイプ ライブラリから定義を作成しています...
生成しています...
モジュールのインポート
  • 生成されたばかりのファイル 3FA7DEA7-6438-101B-ACC1-00AA00423326x0x1x33.py を調べると、利用可能なクラス、メソッド、プロパティ、および定数がわかります。

退屈な手順が終わったので、次は楽しい部分です。

import win32com.client
from win32com.client import Dispatch

session = Dispatch('MAPI.session')
session.Logon ('Outlook') # this is profile name
inbox = session.Inbox
messages = session.Inbox.Messages 
message = inbox.Messages.GetFirst()

if(message):
    attachments = message.Attachments
    for i in range(attachments.Count):
        attachment = attachments.Item(i + 1) # yep, indexes are 1 based

        filename = "c:\\tmpfile" + str(i)
        attachment.WriteToFile(FileName=filename)
session.Logoff()

古いバージョンの CDO (CDO for win2k) を使用している場合も、同じ一般的なアプローチが機能します。

于 2009-01-13T20:08:27.620 に答える