使用 getmail 备份 Gmail

来自 ArchWiki

本文或章节有待与getmail合并。

注意: 只有 #故障排除 部分是 Gmail 特有的。(在 Talk:Backup Gmail with getmail 中讨论)

我们可以使用 getmail 来完整备份 Gmail 帐户中的电子邮件。

电子邮件将以 Maildir 格式备份,这意味着每封电子邮件都将是一个单独的文本文件,可以使用任何电子邮件客户端甚至文本编辑器读取。

安装 getmail

安装 getmailAUR 软件包。

创建所需的文件和文件夹

Getmail 默认从 ~/.getmail/getmailrc 读取其配置。不幸的是,此目录和文件默认不存在,因此我们需要创建它们。

$ mkdir ~/.getmail
$ touch ~/.getmail/getmailrc
$ chmod 700 ~/.getmail

我们还需要创建用于备份电子邮件的文件夹

$ mkdir -p ~/bak/mail
$ cd ~/bak/mail
$ mkdir cur new tmp

在此示例中,选择了 ~/bak/mail,但也可以是 ~/mail。 Maildir 格式和 getmail 需要 cur、new 和 tmp 文件夹。

配置 getmail

编辑配置文件并添加以下条目。

~/.getmail/getmailrc
# More configuration options here:
# http://pyropus.ca/software/getmail/configuration.html
[retriever]
type = SimpleIMAPSSLRetriever
server = imap.gmail.com
mailboxes = ("Inbox", "[Gmail]/Sent Mail") # optional - leave this line out to just grab the inbox
username = USER
password = PASS
提示: 如果邮箱 [Gmail]/Sent Mail 不存在,请尝试将您的 Gmail 语言设置更改为英语。此设置可以与 Google 帐户的语言设置不同。

retriever 部分告诉 getmail 连接到哪里。它使用 IMAP 连接到服务器。对于 POP3,我们可以使用 SimplePOP3SSLRetriever 类型,但我们也必须修改 server 字段。我们要备份的邮箱将是 All Mail。

请注意,Gmail 在某些国家(如德国)被称为 Google Mail。即使所有 GMail 帐户都已迁移到新名称,IMAP 服务器仍然假定 Google Mail 为邮箱目录。在这些情况下,mailboxes 变量必须设置为 [Google Mail]。此外,您可能需要将邮箱标签替换为 GMail 在您的 Google 帐户语言中对该目录的称呼。

username 和 password 字段需要更改为您自己的。

[destination]
type = Maildir
path = ~/bak/mail/

path 字段是目标文件夹(我们之前创建的),电子邮件将在其中备份。所有电子邮件都将放置在“new”中,而 cur 和 tmp 文件夹将保持为空。这是正常的,请勿删除 cur 和 tmp。

options 部分稍长一些

[options]
verbose = 2
message_log = ~/.getmail/log

这告诉 getmail 非常详细,并告诉我们每条消息的状态(是否已成功备份、消息总数等)。此外,所有内容都将记录到 ~/.getmail/log。

# retrieve only new messages
# if set to true it will re-download ALL messages every time!
read_all = false
# do not alter messages
delivered_to = false
received = false

将 delivered_to 和 received 字段设置为 false 将阻止电子邮件被 getmail 更改。

运行 getmail 并添加 cron 任务

现在,如果我们运行 getmail,它将把所有 Gmail 电子邮件备份到 ~/bak/mail,并在过程中输出其状态。

我们希望定期运行 getmail 来备份我们的 Gmail 帐户,因此我们将添加一个 cron 任务

* * * * *   ID=getmail FREQ=1d getmail -q

-q 参数将以静默模式运行 getmail,并且仅报告错误。

迁移邮件,导入旧邮件

本文或章节已过时。

原因: appendmail 仓库已消失。(在 Talk:Backup Gmail with getmail 中讨论)

备份电子邮件对于大多数人来说就足够了,但是如果我们想将电子邮件迁移到另一个帐户,则会有点棘手。来自 http://bitbucket.org/wooptoo/appendmail[死链接 2020-12-20 ⓘ] 的 appendmail 脚本可以帮助我们将电子邮件导入到另一个帐户,无论是 Gmail 还是其他帐户。它也可以用于将旧电子邮件导入到我们现有的 Gmail 帐户中。

基本上,它从其“import”文件夹中读取每个电子邮件文件,并将其放在 Gmail 或另一个帐户上。

直接下载链接是 http://bitbucket.org/wooptoo/appendmail/get/tip.zip[死链接 2020-12-20 ⓘ] 它需要 PHP 才能运行,并且您需要将用户名和密码修改为您自己的。

故障排除

根据您的 Gmail 安全设置,在运行 getmail 时,您可能会遇到此错误

getmailrc: credential/login error ([ALERT] Please log in via your web browser: https://support.google.com/mail/accounts/bin/answer.py?answer=78754 (Failure))
  0 messages (0 bytes) retrieved, 0 skipped

由于 Gmail 不再允许“lesssecureapps” 启用安全性较低的应用的访问权限,您可能需要开启 两步验证,然后创建一个 应用密码 并将其作为密码放入 getmailrc 中(对于 POP3)

~/.getmail/getmailrc
type = SimplePOP3SSLRetriever
server = pop.gmail.com
username = USER@gmail.com
password = APPPASSWORD
port = 995