Python 读取 Outlook 电子邮件
本文将讨论如何借助 win32com.client 模块从 outlook 应用程序读取电子邮件。 我们还学习了如何在 Python 中过滤具有不同属性的电子邮件。
使用 win32com.client 模块从 Outlook 应用程序读取电子邮件
假设您想在亚马逊网站上持续监控某个产品,以检查该产品的价格是否波动。 为简单起见,我们将使用 Python 脚本从 Outlook 读取电子邮件。
我们将创建一个 Python 程序来读取最新的电子邮件,并让我们知道电子邮件的发件人是谁以及电子邮件的主题是什么。 这也会让我们知道电子邮件的正文是什么。
首先,我们将安装 pywin32 包。
pip install pywin32
这个包调用 Outlook 并从 Outlook 读取电子邮件。 一旦完成,我们就可以通过从 win32com 导入客户端模块来编写我们的程序。
import win32com.client as client
现在我们创建名为 My_OL_App 的变量,我们将使用 Dispatch()
获取对象。 Dispatch()
函数接受 Outlook.Application,我们将调用 GetNameSpace()
,它采用名为 MAPI 的 API。
在下一行中,我们创建另一个名为 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()
如果您想遍历所有电子邮件,我们将在本教程的后面部分向您展示。 现在,我们可以使用以下代码打印 SenderName、Subject 和 body。
确保您的电子邮件与 outlook 应用程序连接。
print(Msg.SenderName)
print(Msg.Subject)
print(Msg.body)
使用属性过滤电子邮件
现在我们将了解如何通过选择邮件消息属性(如 SenderName、Subject 等)来过滤电子邮件。我们已经了解了如何使用 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
你可以有两个不同的邮箱,所以当你想读取多个 outlook 邮箱时,你可以在你的变量中定义你想要加载的邮箱和文件夹。 上面的代码是相同的,而不是这行代码; 如果您只有一个邮箱,则无需输入以下代码。
MY_Inbox=My_OL_App.Folders('your email@gmail.com').Folders('Inbox')
我们可以把相关的电子邮件地址连接到您的 Outlook 应用程序。 我们可以使用 Items 属性提取所有收件箱项目,这将是一个集合,然后我们可以一个接一个地循环这些项目。
在循环这些项目时,我们正在从邮箱中一封一封地加载电子邮件。 我们将使用 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)
您可以使用不同的属性过滤电子邮件,例如; SenderEmailAddress 和 SenderName,或者您可以在单个 if 语句中定义具有多个属性的条件。
if "n case you're wondering what's going on" in str(msg.Subject) and msg.SenderEmailAddress=='emailaddress':
还有一个名为 ReceivedTime 的属性,因此如果您想使用收到此电子邮件的日期和时间来过滤电子邮件,您也可以使用此属性。
完整的源代码:
# 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)
相关文章
Pandas DataFrame DataFrame.shift() 函数
发布时间:2024/04/24 浏览次数:133 分类:Python
-
DataFrame.shift() 函数是将 DataFrame 的索引按指定的周期数进行移位。
Python pandas.pivot_table() 函数
发布时间:2024/04/24 浏览次数:82 分类:Python
-
Python Pandas pivot_table()函数通过对数据进行汇总,避免了数据的重复。
Pandas read_csv()函数
发布时间:2024/04/24 浏览次数:254 分类:Python
-
Pandas read_csv()函数将指定的逗号分隔值(csv)文件读取到 DataFrame 中。
Pandas 多列合并
发布时间:2024/04/24 浏览次数:628 分类:Python
-
本教程介绍了如何在 Pandas 中使用 DataFrame.merge()方法合并两个 DataFrames。
Pandas loc vs iloc
发布时间:2024/04/24 浏览次数:837 分类:Python
-
本教程介绍了如何使用 Python 中的 loc 和 iloc 从 Pandas DataFrame 中过滤数据。
在 Python 中将 Pandas 系列的日期时间转换为字符串
发布时间:2024/04/24 浏览次数:894 分类:Python
-
了解如何在 Python 中将 Pandas 系列日期时间转换为字符串