如何删除重要或已发送文件夹中的所有电子邮件?

时间:2014-08-13 06:22:11

标签: python python-3.x gmail imaplib

我的所有邮箱中的电子邮件数量多于重要邮箱和已发邮箱数量。我想删除所有不在重要邮箱或已发邮箱中的邮件。

我无法执行以下任何步骤 1)删除所有邮箱中的所有电子邮件,(当我删除所有邮箱中的所有电子邮件时,重要邮箱和已发邮箱中的所有电子邮件将同时删除)
2)并从重要邮箱和已发邮箱中复制电子邮件。

如何编写代码来完成此任务? 问题可能成为另一种形式:

如何在我的Gmail邮箱中复制电子邮件:“[Gmail] /& kc 2JgQ-”到本地目录g:\ mygmail?

我的Gmail中有5封电子邮件 - 收件箱,我将所有这些邮件保存在g:\ mygmails中,并将其命名为0th.myemail 1th.myemail 2th.myemail 3th.myemail 4th.myemail,代码如下:现在我怎么能通过雷鸟或一些电子邮件软件阅读它们,我不想编写我自己的代码来阅读它们?

import email,imaplib
att_path="g:\\mygmails\\"
user="xxxx"
password="yyyy"
con=imaplib.IMAP4_SSL('imap.gmail.com')
con.login(user,password)
con.select('INBOX')
resp, items = con.search(None, "ALL")  
items = items[0].split() 
for id,num in enumerate(items):
    resp, data = con.fetch(num, "(RFC822)") 
    data=data[0][1]
    fp = open(att_path+str(id)+"th"+".myemail", 'wb')
    fp.write(data)
    fp.close()

2 个答案:

答案 0 :(得分:3)

在谷歌上做了一些挖掘后,我找到了一个github repository,提供了一个模块来做这件事。它没有很好的文档记录,但源代码非常容易阅读,所以它根本不是一个重大的损失。

在使用此模块方面,您可以使用指定的标签加载每封电子邮件,然后标记进行保存,然后浏览所有电子邮件并删除尚未标记

我目前没有看到标记远程服务器上的电子邮件的自然方式,因此您可能必须实现将电子邮件记录为字符串并将其存储在{{1 }}

如果您还有任何问题,请在此回答中发表评论,我可以详细说明。

例如:如果您想将特定邮箱的条目复制到python数据结构中,您可以这样做:

set

因此,假设您相应地调整了全局变量,现在您在# Global Variables username, password, mailboxname = '', '', '[Gmail]/&kc 2JgQ-' # Set up import gmail g = gmail.Gmail() g.login(username, password) # Actual code. emails = [] for email in g.mailbox(mailboxname).mail(): emails.append(email.fetch()) # Tear down. g.logout() 的gmail帐户emails中的所有电子邮件中都有一个python列表(在python变量mailboxname中)。完成此操作后,您可以轻松执行将其保存到文件等操作。

答案 1 :(得分:0)

如果您喜欢Windows_PowerShell我有一个可以轻松重复使用并根据您的需求进行定制的解决方案。您可以设置Mail_User_Agent以使用Web Access API并自动执行此任务。在我的示例中,旧的Powershell(我们已经知道 - 来自Microsoft的任务自动化和配置管理框架)具有无头IE功能(将使其作为守护进程工作并允许它仅在前提条件为真时与我们通信)能够支持这一切。     更准确地说,如果您必须登录并使用防火墙Web访问API - 实现几乎相同。因此,只需一块石头,我们就会得到两只鸟 - 每天早上你都会在墙后面,知道你的邮件内容。您可以在此处查看示例solution