迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

Python 读取 Outlook 电子邮件

作者:迹忆客 最近更新:2023/06/13 浏览次数:

本文将讨论如何借助 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)

上一篇:Python 多处理日志记录

下一篇:没有了

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Python 多处理日志记录

发布时间:2023/06/13 浏览次数:150 分类:Python

本文将讨论 multiprocessing 的概念。 在此之后,我们将讨论 Python 中的多处理和使用 Python 代码进行多处理的日志处理。

Python multiprocessing 共享对象

发布时间:2023/06/13 浏览次数:81 分类:Python

在 Python 中,共享内存多处理由连接多个处理器组成,但这些处理器必须能够直接访问系统的主内存。 这将允许所有连接的处理器访问它们使用或创建的其他处理器数据。

在 Python Lambda 中使用 Await

发布时间:2023/06/13 浏览次数:143 分类:Python

在 Python 中,要实现异步编程,我们可以将 async/await 特性与函数一起使用,但我们使用 lambda 函数来实现。 本文将讨论在 Python lambda 函数中使用 await 的可能性。Python Lamda 中没有async/await lambda

Python Lambda 闭包

发布时间:2023/06/13 浏览次数:141 分类:Python

本篇文章将介绍在 Python 中使用 lambda 函数和闭包。在 Python 中使用 Lambda 函数的语法

Python 中的最长公共子序列

发布时间:2023/06/02 浏览次数:147 分类:Python

本篇文章讲介绍在 Python 中查找两个序列之间最长公共子序列的长度。使用 Naive 方法在 Python 中查找最长公共子序列;使用动态规划在 Python 中查找最长公共子序列

在 Python 请求中使用 Cookie

发布时间:2023/06/02 浏览次数:98 分类:Python

本篇文章介绍如何使用 requests.get() 借助 Python 中的 cookies 参数获取 cookies,以及如何访问需要登录的特定网页。

在 Python 中设置请求的最大重试次数

发布时间:2023/06/02 浏览次数:67 分类:Python

本教程描述了为什么我们会收到错误消息,指出超出了最大重试次数,以及我们如何在 Python 中为请求设置 max_retries。 如果服务器上的负载导致此错误,它还会为我们提供提示。

在 Python 中使用requests模块发布表单数据

发布时间:2023/06/02 浏览次数:184 分类:Python

本篇文章介绍了 Python requests 模块,并说明了我们如何使用该模块在 Python 中发布表单数据。使用 requests 模块在 Python 中发布表单数据

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便