如何在Python中删除电子邮件(代码实现示例)

本文带你了解如何使用 IMAP 协议使用 Python 中的内置 imaplib 模块删除选定邮箱中电子邮件帐户中的特定邮件。Python如何删除电子邮件?你是否曾经想删除邮箱中的电子邮件,但你知道手动操作会花费你大量的时间和精力吗?如何在Python中删除电子邮件?在本教程中,你不仅将学习如何使用 Python 自动删除电子邮件,还将学习如何按日期、主题、发件人等过滤电子邮件,以便一次性删除它们。Python删除电子邮件示例:我们将使用 Python 内置的imaplib模块,但如果你想使用某种 API,我们有一个关于如何使用 Gmail API的教程,其中展示了如何在 Python 中阅读、发送和删除电子邮件。imaplib在 Python 中实现 IMAP 协议,IMAP是电子邮件客户端用于从邮件服务器检索和删除电子邮件的 Internet 标准协议。让我们首先导入必要的模块并指定我们的帐户凭据:

import imaplib import email from email.header import decode_header# account credentials username = "youremailaddress@provider.com" password = "yourpassword"

你当然应该输入你的帐户凭据。以下代码负责连接邮件提供商的 IMAP 服务器:
# create an IMAP4 class with SSL imap = imaplib.IMAP4_SSL("imap.gmail.com") # authenticate imap.login(username, password)

Python如何删除电子邮件?对于本教程的演示,我使用了一个演示 Gmail 帐户,这就是我指定imap.gmail.com服务器的原因。对于其他提供商,请查看此链接,其中包含最常用电子邮件提供商的 IMAP 服务器列表。此外,如果你使用的是 Gmail 帐户并且上述代码引发错误,表明凭据不正确,请确保你的帐户设置中允许使用安全性较低的应用程序。Python删除电子邮件示例:现在我们已经登录到我们的邮件帐户,让我们选择我们的目标邮箱:
# select the mailbox I want to delete in # if you want SPAM, use imap.select("SPAM") instead imap.select("INBOX")

所以我们使用的是选择邮箱使用imap.select()方法,我在本教程中选择了INBOX文件夹,你可以打印imap.list()帐户中可用的邮箱。如何在Python中删除电子邮件?现在让我们进行 IMAP 搜索以搜索我们要删除的邮件:
# search for specific mails by sender status, messages = imap.search(None, 'FROM "googlealerts-noreply@google.com"')

上面的行搜索从 Google Alerts 电子邮件发送的电子邮件,另一个示例可能是按SUBJECT搜索:
# to get mails by subject status, messages = imap.search(None, 'SUBJECT "Thanks for Subscribing to our Newsletter !"')

或按日期搜索:
# to get mails after a specific date status, messages = imap.search(None, 'SINCE "01-JAN-2020"') # to get mails before a specific date status, messages = imap.search(None, 'BEFORE "01-JAN-2020"')

或者,如果你想删除所有电子邮件:
# to get all mails status, messages = imap.search(None, "ALL")

我给了你很多选择,你应该根据你的用例只选择一个搜索行。有关 IMAP 搜索条件的列表,请查看此链接。Python如何删除电子邮件?该status包含字符串是否已成功执行搜索,messages返回为用空格分隔的邮件ID的单字节字符串列表,让我们把它转换成整数的列表:
# convert messages to a list of email IDs messages = messages[ 0].split(b' ')

Python删除电子邮件示例 - 现在让我们遍历目标邮件并将它们标记为已删除:
for mail in messages: _, msg = imap.fetch(mail, "(RFC822)") # you can delete the for loop for performance if you have a long list of emails # because it is only for printing the SUBJECT of target email to delete for response in msg: if isinstance(response, tuple): msg = email.message_from_bytes(response[ 1]) # decode the email subject subject = decode_header(msg[ "Subject"])[ 0][ 0] if isinstance(subject, bytes): # if it's a bytes type, decode to str subject = subject.decode() print("Deleting", subject) # mark the mail as deleted imap.store(mail, "+FLAGS", "\\Deleted")

如何在Python中删除电子邮件?正如上面的评论中所说,如果你想要性能,你可以删除内部的 for 循环,我从阅读电子邮件教程中获取它,它仅用于打印电子邮件的主题,所以我们知道我们要删除什么。最后,我们执行imap.expunge()永久删除标记为已删除邮件的方法,我们也关闭邮箱并从帐户注销:
# permanently remove mails that are marked as deleted # from the selected mailbox (in this case, INBOX) imap.expunge() # close the mailbox imap.close() # logout from the account imap.logout()

太棒了,代码已经完成,为了测试这段代码,我将删除来自 Google Alerts 电子邮件的所有电子邮件:
如何在Python中删除电子邮件(代码实现示例)

文章图片
事实上,在我运行脚本之后,我得到了这个输出:
Deleting Alerte Google – Bitcoin Deleting Alerte Google – Bitcoin Deleting Alerte Google – Bitcoin ...< SNIPPED>... Deleting Alerte Google – Bitcoin

对于此Python删除电子邮件示例演示中,所有电子邮件都具有相同的标题,因为我已按发件人电子邮件对其进行过滤,但是如果你运行不同的搜索条件,你当然会看到不同的输出。结论Python如何删除电子邮件?现在你已经掌握了使用Python 中的imaplib模块自动删除电子邮件的技能。我建议你创建一个新的电子邮件帐户并在其上测试此代码,因为你可能会在主要电子邮件帐户上犯不可逆转的错误。

    推荐阅读