Python 読み取り Outlook 電子メール

Salman Mehmood 2023年10月10日
  1. win32com.client モジュールを使用して、Outlook アプリケーションから電子メールを読み取る
  2. プロパティで電子メールをフィルタリングする
Python 読み取り Outlook 電子メール

この記事では、win32com.client モジュールを使用して Outlook アプリケーションから電子メールを読み取る方法について説明します。 また、Python でさまざまなプロパティを使用して電子メールをフィルタリングする方法も学びます。

win32com.client モジュールを使用して、Outlook アプリケーションから電子メールを読み取る

Amazon Web サイトで特定の製品を監視し続けて、その製品の価格が変動するかどうかを確認したいとします。 簡単にするために、Python スクリプトを使用して Outlook からメールを読むだけです。

最新の電子メールを読み取り、電子メールの送信者と電子メールの件名を知らせる Python プログラムを作成します。 これにより、メールの本文が何であるかもわかります。

まず、pywin32 パッケージをインストールします。

pip install pywin32

このパッケージは、Outlook を呼び出し、Outlook から電子メールを読み取ります。 これが完了したら、win32com から client モジュールをインポートしてプログラムを作成します。

import win32com.client as client

My_OL_App という変数を作成し、Dispatch() を使用してオブジェクトを取得します。 Dispatch() 関数は Outlook.Application を受け入れ、MAPI という名前の API を受け取る GetNameSpace() を呼び出します。

次の行では、MY_Inbox という別の変数を作成し、My_OL_App.GetDefaultFolder() を呼び出して、Outlook アプリケーションからフェッチされるデータを保存します。 次に、括弧内に 6 を入れます。これは、受信トレイ フォルダーを示します。

数字はさまざまな種類のフォルダーを表します。 たとえば、5 は送信済みアイテムを表し、同様に、削除済みアイテム、アーカイブ済みアイテムを表します。 この リンク で言及されているフォルダーを示すさまざまな番号のリストがあります。他のフォルダーをトラバースする場合は、それを確認できます。

My_OL_App = client.Dispatch("Outlook.Application").GetNameSpace("MAPI")
MY_Inbox = My_OL_App.GetDefaultFolder(6)

Items を呼び出して取得したメッセージや別のメールを保存する際に受信トレイ全体にアクセスし、MY_ib_items 変数に保存します。 Msg という別の変数を作成し、最新の電子メールを取得する MY_ib_items.GetLast() を呼び出します。

MY_ib_items = MY_Inbox.Items
Msg = MY_ib_items.GetLast()

すべてのメールをトラバースしたい場合は、このチュートリアルの後半で説明します。 これで、次のコードを使用して、SenderNameSubject、および body を出力できます。

メールが Outlook アプリケーションに接続されていることを確認します。

print(Msg.SenderName)
print(Msg.Subject)
print(Msg.body)

プロパティで電子メールをフィルタリングする

次に、SenderNameSubject, などのメール メッセージ プロパティを選択して電子メールをフィルタリングする方法を見ていきます。Outlook アプリケーションから GetLast() メソッドを使用して最新の電子メールを読み取る方法を見てきました。

また、Outlook アプリケーションから最新のメールと最も古いメールを抽出する方法についても説明します。 Outlook のインスタンスを作成する方法を学習したので、Outlook をメモリにロードし、次のコードに精通していることを意味します。

import win32com.client as client

My_OL_App = client.Dispatch("Outlook.Application").GetNameSpace("MAPI")
# MY_Inbox=My_OL_App.GetDefaultFolder(6)
MY_Inbox = My_OL_App.Folders("your email@gmail.com").Folders(
    "Inbox"
)  # When you two or multiple mail boxes
MY_ib_items = MY_Inbox.Items

2つの異なるメールボックスを持つことができるため、複数の Outlook メールボックスを読み取りたい場合は、変数に読み込むメールボックスとフォルダーを定義できます。 上記のコードは、このコード行の代わりに同じです。 メールボックスが 1つしかない場合は、次のコードを配置する必要はありません。

MY_Inbox = My_OL_App.Folders("your email@gmail.com").Folders("Inbox")

関連する電子メール アドレスを Outlook アプリケーションに関連付けることができます。 コレクションとなる Items プロパティを使用してすべての受信トレイ アイテムを抽出し、これらのアイテムを 1つずつループできます。

これらのアイテムをループするとき、メールボックスからメールを 1つずつ読み込みます。 Subject プロパティを使用してメールをフィルタリングし、ループが受信トレイを反復処理して、メールの件名が一致するかどうかを確認します。

for msg in MY_ib_items:
    if "n case you're wondering what's going on" in str(msg.Subject):
        print(msg.SenderName)
        print(msg.Subject)
        print(msg.body)

次のようなさまざまなプロパティを使用して、電子メールをフィルタリングできます。 SenderEmailAddressSenderName、または単一の if ステートメントで複数のプロパティを使用して条件を定義できます。

if (
    "n case you're wondering what's going on" in str(msg.Subject)
    and msg.SenderEmailAddress == "emailaddress"
):
    pass

ReceivedTime というプロパティがもう 1つあります。このメールを受信した日時を使用してメールをフィルタリングする場合は、このプロパティも使用できます。 こちら(https://learn.microsoft.com/en-us/dotnet/api/microsoft.office.interop.outlook.mailitem?redirectedfrom=MSDN&view=outlook-pia#properties “LCO”) でその他のプロパティを検索し、こちら(https://learn.microsoft.com/en-us/dotnet/api/microsoft.office.interop.outlook.mailitem?redirectedfrom=MSDN&view=outlook-pia#properties “LCO”) にアクセスしてその他のソリューションをご覧ください。

完全なソース コード:

# import win32com.client as client

# My_OL_App = client.Dispatch('Outlook.Application').GetNameSpace('MAPI')
# MY_Inbox=My_OL_App.GetDefaultFolder(6)

# MY_ib_items=MY_Inbox.Items
# Msg=MY_ib_items.GetLast()

# print(Msg.SenderName)
# print(Msg.Subject)
# print(Msg.body)

# Filter Emails With Properties

import win32com.client as client

My_OL_App = client.Dispatch("Outlook.Application").GetNameSpace("MAPI")
MY_Inbox = My_OL_App.GetDefaultFolder(6)
MY_Inbox = My_OL_App.Folders("your email@gmail.com").Folders(
    "Inbox"
)  # When you two or multiple mail boxes
MY_ib_items = MY_Inbox.Items

for msg in MY_ib_items:
    if "n case you're wondering what's going on" in str(msg.Subject):
        print(msg.SenderName)
        print(msg.Subject)
        print(msg.body)
著者: Salman Mehmood
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn