发布于 2026-01-06 8 阅读
0

使用 Python 清理邮箱

使用 Python 清理邮箱

我的收件箱里堆积了好多未读邮件,要么是推广邮件,要么就是我当时懒得看。现在想象一下,打开邮箱看到上千封邮件——简直是1917年的噩梦!我该如何尽快清理掉这些邮件呢?

我知道 Gmail 有删除功能,但我相信我们应该“用 Python 自动化枯燥乏味的事情”,你可能会学到一些新东西,也可能不会。

在本文中,我将向您展示如何使用 IMAPlib 设置脚本将收件箱中未读/不需要的邮件发送到垃圾箱,以及如何使用 IMAPClient 永久删除未读/不需要的邮件。

让我们直接进入正题!

先决条件

  • Python
  • Gmail帐户
  • ImapClient [可选]

设置您的 Gmail 帐户

IMAP 代表 Internet Mail Access Protocol(互联网邮件访问协议)。根据维基百科的定义,它是“电子邮件客户端用于通过 TCP/IP 连接从邮件服务器检索电子邮件的互联网标准协议”。

首先,我们需要设置一个 Gmail 帐户才能顺利完成此过程。我对我的 Gmail 帐户进行了以下更改,启用了 IMAP 并允许安全性较低的应用访问。

  1. 首先,打开 Gmail,点击设置⚙️图标,然后点击“查看所有设置”以启用 IMAP。
  2. 在下一页中,点击“转发和 POP/IMAP”选项卡。
  3. “IMAP 访问”部分,选择“启用 IMAP”。然后单击“保存更改”。如果您需要更多帮助,请访问此Gmail 帮助页面
  4. 要启用安全性较低的应用,请点击屏幕右上角的帐户头像,然后点击“我的帐户”进入 Google 信息中心,或者访问 myaccount.google.com。
  5. 然后选择“登录和安全”,向下滚动直到看到“允许安全性较低的应用”选项,然后打开访问权限。

如果按照上述步骤操作后仍然无法登录,请访问此处获取谷歌官方帮助支持

如何使用 IMAPlib 删除邮件

IMAP 库是 Python 内置库,用于通过 IMAP 协议访问和操作电子邮件。以下代码将您登录到所需的电子邮件地址。登录后,我们选择所需的邮箱,即可查看所有可用邮箱的列表print(mail.list())

IMAPlib 的初始代码

本部分邮件被送入垃圾箱的标准如下:

  • 未读邮件。
  • 根据特定主题发送的电子邮件。
  • 根据特定发件人发送电子邮件。
import imaplib
import getpass
username =  input("Enter the email address: ")
password = getpass.getpass("Enter password: ")
mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login(username, password)
mail.select("INBOX")
Enter fullscreen mode Exit fullscreen mode

删除所有未读邮件

以下代码会将所有未读邮件移至垃圾箱。由于邮件的保存期限为 30 天,Gmail 会在 30 天内将其从垃圾箱中移除。首先,我们搜索邮件,并将条件设置为“UNSEEN”(未读邮件的标记)。变量 result 是命令的退出代码,而 messages 是一个包含字节类型对象的列表。最后,我们遍历列表中的邮件,并将它们放入垃圾箱。

results, messages = mail.search(None, 'UNSEEN')
messages = messages[0].split()
for x in messages:
  result, message = mail.store(x, '+X-GM-LABELS', '\\Trash')
mail.close()
mail.logout()
Enter fullscreen mode Exit fullscreen mode

删除所有包含特定主题的电子邮件

在这里,我们使用所需的条件搜索选定的邮箱。您应该将"Title"以下代码中的 `<sub>` 替换为您所需的主题:

results, messages = mail.search(None, '(SUBJECT "Title")')
messages = messages[0].split()
for x in messages:
  result, message = mail.store(x, '+X-GM-LABELS', '\\Trash')
mail.close()
mail.logout()
Enter fullscreen mode Exit fullscreen mode

删除来自特定发件人的所有电子邮件

在这里,我们使用所需的条件搜索邮箱。请将"abc@xyz.com"以下代码中的 `<email address>` 替换为您常用的电子邮件地址:

results, messages = mail.search(None, '(FROM "abc@xyz.com")')
messages = messages[0].split()
for x in messages:
  result, message = mail.store(x, '+X-GM-LABELS', '\\Trash')
mail.close()
mail.logout()
Enter fullscreen mode Exit fullscreen mode

接下来我将简要介绍一下所使用的方法。

  • search()这是一个用于查找所选邮箱的方法,它接受两个参数:字符集和条件。字符集可以设置为 None。
  • store()是用于更改消息的标志或标签的方法;它接受三个参数:消息、命令和标志。
  • close()是用于关闭所选邮箱的方法。
  • logout()是用于关闭与服务器连接的方法。
  • '+X-GM-LABELS'标签被视为文件夹,因此可以使用 IMAP 命令对邮件进行更改。

如何使用 IMAPClient 永久删除电子邮件

在撰写本文的过程中,我偶然发现了 IMAPClient 库。从其官方文档中,我发现:“虽然 IMAPClient 实际上在底层使用了 Python 标准库中的 imaplib 模块,但它提供了不同的 API。”

使用 IMAPClient 删除邮件不会将邮件发送到垃圾箱,而是会永久删除。在使用此处任何代码片段之前,请务必确认您确实想要永久删除邮件。

IMAPClient 的初始代码

要使用 IMAPClient,您必须使用以下命令安装该软件包:

pip install imapclient
Enter fullscreen mode Exit fullscreen mode

接下来,我们导入库并设置我们电子邮件地址的服务器。

from imapclient import IMAPClient
import getpass
server = IMAPClient('imap.gmail.com', use_uid=True)
username =  input("Enter the email address: ")
password = getpass.getpass("Enter password: ")
server.login(username, password)
select_info = server.select_folder("INBOX")
Enter fullscreen mode Exit fullscreen mode

本部分邮件被送入垃圾箱的标准如下:

  • 未读邮件。
  • 根据特定主题发送的电子邮件。
  • 根据特定发件人发送电子邮件。

永久删除所有未读邮件

以下代码会永久删除所有未读邮件。

messages = server.search("UNSEEN")
for x in messages:
  server.delete_messages(x)
server.logout()
Enter fullscreen mode Exit fullscreen mode

永久删除所有包含特定主题的电子邮件

我们将使用所需的条件搜索选定的邮箱。请将"Title"以下代码中的 `<object>` 替换为您所需的主题:

messages = server.search(['SUBJECT', 'Title'])
for x in messages:
  server.delete_messages(x)
server.logout()
Enter fullscreen mode Exit fullscreen mode

永久删除来自特定发件人的所有电子邮件

我们会根据预设条件搜索邮箱。请将"abc@xyz.com"以下代码中的地址替换为您常用的邮箱地址:

messages = server.search(['FROM', 'abc@xyz.com'])
for x in messages:
  server.delete_messages(x)
server.logout()
Enter fullscreen mode Exit fullscreen mode

笔记

  • 退出服务器很重要
  • 在使用 IMAPlib 时,要访问所有电子邮件,请使用mail.select('"[Gmail]/All Mail"').
  • 请务必关闭安全性较低的应用程序。
  • 制作本教程的过程中,很多电子邮件都受到了损害😂。

结论

我写这篇文章的时候很开心,希望你读的时候也一样。不过,我在编写脚本的过程中也遇到了一些错误。最常见的问题是,即使按照谷歌帮助页面上的说明操作,也无法登录。出现这个问题是因为我登录了多个Gmail帐户,而且我没有使用默认邮箱。如果你也遇到同样的问题,解决方法如下:

您可以在GitHub上找到完整的脚本

感谢您阅读本教程!

参考

文章来源:https://dev.to/yomaokobiah/decluttering-mailbox-using-python-44l8