写点什么

如何用 Python 快速的搜索邮件

发布于: 2021 年 06 月 10 日
如何用Python快速的搜索邮件

我们之前通过 win32 实现了用 Python 来获取 OutLook 邮件信息的功能,但是放在实际工作中还是有很多问题的,其中最严重的就是如果目标文件夹中的邮件很多,那么这个循环遍历将会很慢!那么,有没有好的办法来缩小遍历的范围呢?

通过使用 Restrict 方法来缩小搜索范围

例如,我们有如下需求:

获取所有未读并且邮件的分类(Categories)标记为指定内容的邮件。

1. 之前的写法

import win32com.clientimport win32com
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")folder = outlook.Folders.Item("特定的文件夹")messages = folder.Items
for msg in messages: if msg.UnRead and "指定内容" in msg.Categories: print(msg.body)
复制代码

这段代码的思路是遍历所有邮件,并判断邮件是否为未读(UnRead),并且指定内容在分类里面(Categories)。如果条件为真,便显示邮件内容。

整体没有什么问题,但是如果邮件数量巨大则执行效率会很慢,因为它要遍历所有的邮件。

2. 改良后的写法

import win32com.clientimport win32com
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")folder = outlook.Folders.Item("特定的文件夹")messages = folder.Items
target_msgs = messages.Restrict("[UnRead] = True and [Categories]='牛宝華'")for msg in target_msgs: print(msg.body)
复制代码

这段代码的思路是,先通过 Restrict 将符合条件的邮件筛选出来,然后再去遍历邮件

经过实验,这样的速度会快很多,当然了,如果本身你所有的邮件都是目标,那么两者的差距并会太大。


如果你对办公自动化感兴趣,请持续关注我。如果这篇内容对你有所帮助,也欢迎你将它转发给你的朋友。

我们下期见。

发布于: 2021 年 06 月 10 日阅读数: 61
用户头像

一个日语专业的程序猿。 2017.09.10 加入

【坐标】无锡 【软件技能】Java,C#,Python 【爱好】炉石传说 【称号】InfoQ年度人气作者,Intel OpenVINO领航者联盟成员 【B站】https://space.bilibili.com/397260706/ 【个人站】www.it-worker.club

评论

发布
暂无评论
如何用Python快速的搜索邮件