Python Outlook-E-Mail lesen

Salman Mehmood 10 Oktober 2023
  1. Verwenden Sie das Modul win32com.client, um E-Mails aus der Outlook-Anwendung zu lesen
  2. E-Mails mit Eigenschaften filtern
Python Outlook-E-Mail lesen

In diesem Artikel wird erläutert, wie E-Mails aus der Outlook-Anwendung mit Hilfe des Moduls win32com.client gelesen werden. Wir lernen auch, wie man E-Mails mit verschiedenen Eigenschaften in Python filtert.

Verwenden Sie das Modul win32com.client, um E-Mails aus der Outlook-Anwendung zu lesen

Angenommen, Sie möchten ein bestimmtes Produkt auf der Amazon-Website weiter überwachen, um zu prüfen, ob der Preis dieses Produkts schwankt. Um es einfach zu halten, werden wir E-Mails aus Outlook nur mit Python-Skript lesen.

Wir erstellen ein Python-Programm, das die neueste E-Mail liest und uns mitteilt, wer der Absender der E-Mail ist und was der Betreff der E-Mail ist. Dadurch erfahren wir auch, was der Text der E-Mail ist.

Zuerst installieren wir das Paket pywin32.

pip install pywin32

Dieses Paket ruft Outlook auf und liest E-Mails aus Outlook. Sobald dies erledigt ist, können wir unser Programm schreiben, indem wir das client-Modul von win32com importieren.

import win32com.client as client

Jetzt erstellen wir die Variable namens My_OL_App und erhalten Objekte mit Dispatch(). Die Funktion Dispatch() akzeptiert eine Outlook.Application, und wir rufen GetNameSpace() auf, was eine API namens MAPI verwendet.

In der nächsten Zeile erstellen wir eine weitere Variable namens MY_Inbox, dann rufen wir My_OL_App.GetDefaultFolder() auf, um Daten zu speichern, die von der Outlook-Anwendung abgerufen werden. Jetzt setzen wir 6 in die Klammer, was den Posteingangsordner bezeichnet.

Die Zahlen bezeichnen verschiedene Arten von Ordnern; Beispielsweise bezeichnet 5 das gesendete Element und ähnlich für gelöschte Elemente archivierte Elemente. Wir haben eine Liste mit verschiedenen Nummern, die Ordner bezeichnen, die in diesem Link erwähnt wurden. Sie können sie überprüfen, wenn Sie einen anderen Ordner durchsuchen möchten.

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

Wir haben Zugriff auf den gesamten Posteingang, während wir Items aufrufen, um abgerufene Nachrichten oder verschiedene E-Mails zu speichern, und wir speichern sie in der Variable MY_ib_items. Wir erstellen eine weitere Variable namens Msg und rufen dann MY_ib_items.GetLast() auf, wodurch die neueste E-Mail abgerufen wird.

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

Wenn Sie alle E-Mails durchgehen möchten, zeigen wir Ihnen das später in diesem Tutorial. Jetzt können wir den SenderName, Subject und body mit dem folgenden Code drucken.

Stellen Sie sicher, dass Ihre E-Mail mit der Outlook-Anwendung verbunden ist.

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

E-Mails mit Eigenschaften filtern

Jetzt sehen wir uns an, wie man E-Mails filtert, indem man die E-Mail-Nachrichteneigenschaften wie SenderName, Subject, usw. auswählt. Wir haben gesehen, wie man die neueste E-Mail mit der Methode GetLast() aus der Outlook-Anwendung liest.

Wir werden uns auch ansehen, wie Sie die neuesten und ältesten E-Mails aus der Outlook-Anwendung extrahieren können. Da wir gelernt haben, wie man eine Instanz von Outlook erstellt, was bedeutet, dass wir Outlook in den Speicher laden, sind wir auch mit dem folgenden Code vertraut.

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

Sie könnten zwei verschiedene Postfächer haben. Wenn Sie also mehrere Outlook-Postfächer lesen möchten, können Sie das Postfach und den Ordner, den Sie laden möchten, in Ihrer Variablen definieren. Der obige Code ist derselbe anstelle dieser Codezeile; Wenn Sie nur eine Mailbox haben, müssen Sie den folgenden Code nicht eingeben.

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

Wir können die relevante E-Mail-Adresse mit Ihrer Outlook-Anwendung verbinden. Wir können alle Posteingangselemente mit der Eigenschaft Items extrahieren, die eine Sammlung sein wird, und dann können wir diese Elemente einzeln durchlaufen.

Wenn wir diese Elemente durchlaufen, laden wir E-Mails nacheinander aus dem Postfach. Wir filtern E-Mails mit der Eigenschaft Betreff, und die Schleife durchläuft den Posteingang und prüft dann, ob der Betreff der E-Mail übereinstimmt.

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)

Sie können E-Mails anhand verschiedener Eigenschaften filtern, z. SenderEmailAddress und SenderName, oder Sie können Bedingungen mit mehreren Eigenschaften in einer einzigen if-Anweisung definieren.

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

Es gibt eine weitere Eigenschaft namens ReceivedTime. Wenn Sie also E-Mails nach Datum und Uhrzeit des Eingangs dieser E-Mail filtern möchten, können Sie diese Eigenschaft auch so verwenden. Weitere Immobilien finden Sie hier(https://learn.microsoft.com/en-us/dotnet/api/microsoft.office.interop.outlook.mailitem?redirectedfrom=MSDN&view=outlook-pia#properties “LCO”) und besuchen Sie hier(https://learn.microsoft.com/en-us/dotnet/api/microsoft.office.interop.outlook.mailitem?redirectedfrom=MSDN&view=outlook-pia#properties “LCO”), um weitere Lösungen zu lesen.

Vollständiger Quellcode:

# 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 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