场景如下:
- 空间较小的 IMAP 服务器(例如 1GB)
- 相当多的 IMAP 客户端(例如 2 部手机、1 部平板电脑、3 台 PC)以及 Thunderbird 38.3 或更高版本等电子邮件客户端
我想要实现的是:
- 所有 PC 客户端都应保留邮件的完整副本(而不仅仅是邮件头)
- 所有 PC 客户端都应在本地保存远程删除的所有消息(即,在同步后,先将整封邮件从其自己的 IMAP 文件夹中删除,然后再将其移至本地文件夹)
这样,就可以节省 IMAP 服务器的空间,同时在每台 PC 上保留所有(完整)消息的本地副本(前提是当从非 PC 客户端删除电子邮件时 PC 客户端会同步 - 避免从非 PC 客户端删除可能是确保本地副本完整的一种解决方法)。
我发现了一些解决类似情况的相关问题(例如这和这),但没有一个能解决这个问题。
我相信这是一个相当普遍的需求,所以我希望一些电子邮件客户端专家,希望是 Thunderbird,能够提出解决方案。
答案1
您可以在客户端的 PC 上使用 POP3 代替 IMAP,或者至少在一台 PC 上使用。默认情况下,POP3 会下载所有电子邮件,并且如果服务器上的电子邮件被删除,它也不会删除(不进行同步,只下载电子邮件),因此您可以将所有邮件下载到本地,并在需要时手动删除它们。这里这两个协议有什么区别
让非 PC 客户端使用 IMAP,因为它更方便同步,如果删除了某些邮件,您可以在使用 POP3 的 PC 上找到它们
答案2
答案3
您可以创建一个 Thunderbird 过滤器,将消息从 IMAP 文件夹移动到本地文件夹。
无论如何,“IMAP 存档器和删除器”似乎是互联网社区至少 10 年来迫切需要的,不知道为什么到现在还没有解决方案。我目前正在这里工作:
我的最终目标是:
1)建立一个 Excel 工作簿,自动执行删除大量消息和/或下载它们的任务。
2) 对于那些没有安装 MS Office 的用户来说,将此类工作簿转换为独立的 VBS 脚本。
3)创建一个 PHP 页面,为所有人执行此类任务,无论 Windows/Mac/Linux
我首先已经达到了良好的状态,其他状态还有待提高。
与此同时,这里有一些有用的命令可以手动操作你的 IMAP 服务器:
连接:
telnet imap.xxxx.yyyy 143 -f log.txt
登录:
. login user pass
列出可用的文件夹:
. list "" *
进入文件夹:
. select foldername
将 1 至 15 条消息标记为已删除:
. store 1:15 +FLAGS \Deleted
它们将会实时从 Outlook 中消失。
撤消上面的操作(减号):
. store 1:15 -FLAGS \Deleted
(它们将会在 Outlook 中重新可见)。
将此类邮件移至垃圾文件夹(否则它们将不可见,而不会被删除):
. move 1:15 trash
实际删除消息:
. select trash
. expunge
您还可以将所有命令粘贴到 telnet 窗口中以执行它们:
. select inbox
. store 1:15 +FLAGS \Deleted
. move 1:15 trash
. select trash
. expunge
为了避免“盲目删除”,您需要知道从 1 条到 15 条消息的内容。
. fetch 1:15 ( flags body[header.fields (subject date)])
答案4
每当我的 IMAP 收件箱几乎满了时,我都会使用 Thunderbird 中的“存档”操作将电子邮件从 IMAP 文件夹手动移动到我保存在 Dropbox 文件夹中的本地文件夹。
因此,我在 IMAP 服务器上保存了最多 1 GB 的重要/近期邮件(因此可以在手机上使用),并且本地文件夹中的所有其他存档(或复制)电子邮件都通过 Dropbox 在 PC 之间同步,并可供所有安装了 Thunderbird 的 PC 使用(或者您也可以使用便携版本)。(如果您更改存档的电子邮件状态或标签,也会立即同步到所有其他实例。)Dropbox 还为您提供所有文件至少 30 天的版本历史记录,以防出现任何问题。
但请记住,Thunderbird 仍然有一个令人讨厌的 IMAP 移动/存档错误,如果您在离线模式下不执行移动操作,可能会导致数据丢失: https://bugzilla.mozilla.org/show_bug.cgi?id=462156
因此您应该手动复制/验证/删除,而不是移动/存档。