我如何根据每个发件人的累积邮件(包括正文和附件)在我的 Gmail 帐户中占用的总空间量对电子邮件发件人(不同的“发件人”地址)进行排序?我在想类似的事情:
- 通过 IMAP 下载所有邮件到本地客户端(如 Thunderbird)
- 以某种方式将电子邮件数据转换为可以查询的数据库
- 使用 SQL 之类的东西查询数据库并获取每个发件人的总邮件大小
有人能帮我进一步充实一下吗?
答案1
你可以在雷鸟无需外部软件。
步骤 1:获取数据
要么进入谷歌外卖(https://takeout.google.com/) 并下载所有 Gmail 邮件的完整副本。您将获得 MBOX 格式的所有内容,然后可以将其导入客户端。
或者,配置客户端直接使用下载消息信息访问协议。
第 2 步:对电子邮件进行分组
进入收件箱,选择右上角的图标消息显示列表选项并选择表格视图
再次选择相同的图标,然后在排序方式选项,选择从
最后,再次选择相同的图标,然后在排序方式选项,选择按排序分组
步骤 3:查看数据
点击每个组。在消息预览侧,在底部,您将看到一个提示,其中包含累计大小该组电子邮件。
例如,它会说类似“这些消息占用了 4.7 KB。”
答案2
我使用脚本来完成基本操作。虽然它不能直接在超级用户上共享,但它执行的基本步骤如下:
- 通过 IMAP¹ 连接到服务器
SELECT
给定文件夹²SEARCH
给定范围内的电子邮件((SINCE "<date>") (NOT DELETED))
FETCH
对于每封电子邮件³字段(RFC822.SIZE BODY.PEEK[HEADER.FIELDS (FROM)])
- 按来源对结果进行分组,并计算大小总和
- 排序并打印结果
对于一次性运行,您甚至可以在单个会话中手动执行此操作(将其复制到文件中以供以后解析)。请记住,IMAP 要求您在每个命令前加上(任意)标签⁴,并且回复将具有相同的标签,但也可能混杂未加标签的响应。
会话可能看起来像这样:
* OK Gimap ready for requests
x1 LOGIN myusername mypassword
x1 OK LOGIN completed.
x2 SELECT INBOX
* 1234 EXISTS
* 11 RECENT
* FLAGS (\Seen \Answered \Flagged \Deleted \Draft)
* OK [PERMANENTFLAGS (\Seen \Answered \Flagged \Deleted \Draft)] Permanent flags
* OK [UNSEEN 1203] Is the first unseen message
* OK [UIDVALIDITY 14] UIDVALIDITY value
* OK [UIDNEXT 65530] The next unique identifier value
x3 OK [READ-WRITE] SELECT completed.
x4 UID FETCH 1:65530 (RFC822.SIZE BODY.PEEK[HEADER.FIELDS (FROM)])
* 1 FETCH (RFC822.SIZE 9999 BODY[HEADER.FIELDS (FROM)] {43}
From: "Jon Postel" <[email protected]>
UID 3522)
* 2 FETCH (RFC822.SIZE 9989 BODY[HEADER.FIELDS (FROM)] {76}
From: "Super user question"
<[email protected]>
UID 7476)
* 3 FETCH (RFC822.SIZE 9889 BODY[HEADER.FIELDS (FROM)] {70}
From: "Stack Exchange"
<[email protected]>
UID 8084)
...
x5 LOGOUT
* BYE Logout Requested
注意:上面的电子邮件大小为 9999、9989 和 9889。UID FETCH
范围 1:65530 基于 UIDNEXT 为 65530。
¹ 目前,在 Gmail 中最简单的方法是使用应用程序密码。目前,只有启用 2FA 后才可使用该功能。
² 就您而言,您可能对 Gmail 中特殊的“所有邮件”文件夹感兴趣。使用一个只包含少量邮件的文件夹进行测试。
³ 实际上是以 100 封电子邮件为一批。
⁴ 样本上的 x1、x2、x3、x4、x5