52

データを操作できるように、exchange/Outlook プロファイルのフォルダー内の電子メールの内容を読み取る短いプログラムを作成しようとしています。しかし、python と exchange/Outlook の統合に関する多くの情報を見つけるのに問題があります。多くのものは、非常に古いか、ドキュメントがないか、説明されていません。いくつかのスニペットを試しましたが、同じエラーが発生しているようです。私はTim Goldenのコードを試しました:

import win32com.client

session = win32com.client.gencache.EnsureDispatch ("MAPI.Session")

#
# Leave blank to be prompted for a session, or use
# your own profile name if not "Outlook". It is also
# possible to pull the default profile from the registry.
#
session.Logon ("Outlook")
messages = session.Inbox.Messages

#
# Although the inbox_messages collection can be accessed
# via getitem-style calls (inbox_messages[1] etc.) this
# is the recommended approach from Microsoft since the
# Inbox can mutate while you're iterating.
#
message = messages.GetFirst ()
while message:
    print message.Subject
    message = messages.GetNext ()

ただし、エラーが発生します。

pywintypes.com_error: (-2147221005, 'Invalid class string', None, None)

私のプロファイル名が何であるかわからないので、試してみました:

session.Logon()

プロンプトが表示されますが、それも機能しませんでした (同じエラー)。また、Outlookを開いた状態と閉じた状態の両方で試しましたが、どちらも何も変わりませんでした。

4

4 に答える 4

79

私はあなたと同じ問題を抱えていました - うまくいくものはあまり見つかりませんでした。ただし、次のコードは魅力的に機能します。

import win32com.client

outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")

inbox = outlook.GetDefaultFolder(6) # "6" refers to the index of a folder - in this case,
                                    # the inbox. You can change that number to reference
                                    # any other folder
messages = inbox.Items
message = messages.GetLast()
body_content = message.body
print body_content
于 2013-04-09T14:24:26.300 に答える
4

私の悪い英語でごめんなさい。Python とMAPIを使用してメールをチェックする方が簡単です。

outlook =win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
folder = outlook.Folders[5]
Subfldr = folder.Folders[5]
messages_REACH = Subfldr.Items
message = messages_REACH.GetFirst()

ここで、一番最初のメールをメール ボックスまたは任意のサブ フォルダに入れることができます。実際には、メールボックスの番号と向きを確認する必要があります。この分析の助けを借りて、各メールボックスとそのサブメールボックス フォルダーを確認できます。

同様に、最後の/以前のメールを確認できる以下のコードを見つけてください。どのように確認する必要があるか。

`outlook =win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
folder = outlook.Folders[5]
Subfldr = folder.Folders[5]
messages_REACH = Subfldr.Items
message = messages_REACH.GetLast()`

これにより、最新のメールをメールボックスに入れることができます。上記のコードによると、すべてのメールボックスとそのサブフォルダーを確認できます。

于 2017-07-03T14:09:22.990 に答える