目录

  1. 问题
  2. 解决方法
  3. eml 和 mbox 格式
  4. END

问题

我想导出我的 QQ 邮箱中某个文件夹下的所有文件,eml 或者 mbox 格式都行,但是我发现 QQ 邮箱网页端没这个功能,只能一封一封导出为 eml。QQ 邮箱也没有 Mac 或者 windows 客户端。然后我尝试用 Mac 自带邮件客户端、foxmail、outlook、thunderbird 客户端来导出,结果发现都存在一个问题:邮件不完整,似乎只能显示近一个月内的邮件。我怀疑是这些客户端的设置没弄好,但找了一圈发现没有相关设置。

解决方法

后来我再去查看 QQ 邮箱网页端的设置时发现,有个「收取选项」设置,默认为「最近 30 天」。这下就破案了,只需改为全部即可,然后在客户端刷新或重新添加账户。

修改「收取选项」为「最近 30 天」修改「收取选项」为「最近 30 天」

如果你想导出 QQ 邮箱中某个文件夹下的所有文件,可以尝试这个方法:

  1. 在 QQ 邮箱网页端将「收取选项」设置为「全部」
  2. 在你的电脑上下载一个支持导出邮件的客户端,例如 Mac 自带邮件客户端、foxmail、outlook、thunderbird 客户端等;
  3. 在客户端中添加 QQ 邮箱账户,并选择要导出的文件夹;
  4. 根据客户端的要求导出即可。

eml 和 mbox 格式

eml 格式是一种用于存储电子邮件的文件格式,其英文全称为 “email message format”。一个 eml 文件通常包括邮件的头部信息和正文内容,可以使用邮件客户端或者文本编辑器打开。下面是一个 eml 文件的简单示例:

1
2
3
4
5
From: [[email protected]](mailto:[email protected])
To: [[email protected]](mailto:[email protected])
Subject: This is a test email

This is the body of the email.

在 Python 中读取一个 eml 文件,可以使用 Python 内置的 email 模块。下面是一个读取 eml 文件并打印邮件头部和正文内容的 demo 代码:

1
2
3
4
5
6
7
8
9
import email

with open('example.eml', 'rb') as fp:
msg = email.message_from_binary_file(fp)

print('From:', msg['From'])
print('To:', msg['To'])
print('Subject:', msg['Subject'])
print('Body:', msg.get_payload())

mbox 格式是另一种常见的存储邮件的文件格式,其英文全称为 “mailbox format”。一个 mbox 文件通常包括多个邮件,每个邮件之间用一个特殊的分隔符隔开,可以使用邮件客户端或者文本编辑器打开。下面是一个 mbox 文件的简单示例:

1
2
3
4
5
6
7
8
9
10
11
From [email protected] Wed May 18 13:48:45 2022
Return-Path: <[email protected]>
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on example.com
...
This is the body of the email.

From [email protected] Wed May 18 14:03:10 2022
Return-Path: <[email protected]>
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on example.com
...
This is another email.

在 Python 中读取一个 mbox 文件,可以使用 Python 内置的 mailbox 模块。下面是一个读取 mbox 文件并打印每个邮件的头部和正文内容的 demo 代码:

1
2
3
4
5
6
7
8
9
import mailbox

mbox = mailbox.mbox('example.mbox')

for msg in mbox:
print('From:', msg['From'])
print('To:', msg['To'])
print('Subject:', msg['Subject'])
print('Body:', msg.get_payload())

END