第一次发帖,长期潜水/阅读。抱歉,这个问题太冗长了……我本想简明扼要。另外,抱歉,这些链接不是“实际”链接——我没有足够的声望在一个问题中发帖超过 2 个。
我所在的公司运行着自己的 IMAP 邮件服务器,[1]
在 Windows Server 上使用 VPOP3 Enterprise v6.10(抱歉,不确定是哪个版本)。我们的系统管理员(大部分)都喜欢我们使用的邮件服务器,它是付费许可证,他做出最终决定。我对该服务器唯一真正的抱怨是缺乏(或损坏)IMAP IDLE 支持。我讨厌缺乏 IDLE 支持,我向系统管理员询问了这个问题。他说他之前在 VPOP3 中启用了 IDLE 支持,但 Outlook 和 IDLE 显然存在一些奇怪之处(或者只是 VPOP3 的实现?)导致他无法保持启用状态 [可能有一半的公司,如果不是更多的话,使用 Outlook 作为他们的邮件客户端]。我发现关于 VPOP3 对[2]
IMAP IDLE 的支持的文档非常少[3]
。
我们中的许多人都是“在现场”工作的,能够在办公室外收到电子邮件真是太好了……我们中的许多人都使用智能手机来接收电子邮件。不幸的是,我们必须将设备设置为“轮询”服务器,这就需要在轮询频率和电池寿命之间找到平衡。我已经被 Gmail 和我的大学邮件帐户的“推送”邮件宠坏了(在切换到 Google Apps 之前,它们在自己的 IMAP 服务器上运行),所以我真的希望解决这个问题。
背景介绍完毕——我想要做的是在我们的局域网上设置另一台服务器来“代理”来自 VPOP3 服务器的邮件,并允许客户端连接到它。
理想情况下,我希望解决方案是:
- 自动将代理的所有更改同步回 VPOP3(例如将消息标记为已读、删除、移动到文件夹等)
- 如果公司其他人想使用此代理,则不需要我的干预
- 我不想手动配置用户名和密码来连接到 VPOP3 服务器。首选解决方案不会为用户缓存/获取任何邮件,直到他们首次登录代理。一旦他们登录,缓存他们的凭据(希望是加密的!)并每分钟左右轮询 VPOP3 以获取电子邮件。这样,我就不会为不会使用它的用户(可能有很多)浪费资源。
- 允许客户端维持 IDLE 连接以支持“推送”电子邮件
- 占用尽可能少的磁盘空间(即避免将邮件本身存储在我的代理 IMAP 服务器上)
- 如果大部分邮件内容(正文、附件)可以保留在 VPOP3 服务器上,而代理只是即时下载消息,我会很高兴。或者也许缓存已登录用户的最近 X 天/MB/消息(以避免向主邮件服务器发送大量请求)。我同意将标题/元数据保留在代理上;我只是不想在代理服务器上重复
存储所有消息和附件。
- 如果大部分邮件内容(正文、附件)可以保留在 VPOP3 服务器上,而代理只是即时下载消息,我会很高兴。或者也许缓存已登录用户的最近 X 天/MB/消息(以避免向主邮件服务器发送大量请求)。我同意将标题/元数据保留在代理上;我只是不想在代理服务器上重复
关于我们的服务器的更多信息:
- VPOP3 服务器接受未加密、SSL/TLS 或 STARTTLS 连接。加密会很好,但我知道这可能很棘手。由于两个邮件服务器都位于我们的公司局域网上,所以我同意使用未加密的选项来抓取邮件。
- VPOP3 IMAP 功能:(
* CAPABILITY IMAP4rev1 AUTH=CRAM-MD5 NAMESPACE ACL STARTTLS LIST-EXTENDED CHILDREN SPECIAL-USE CREATE-SPECIAL-USE METADATA
这是我在未加密连接时获得的结果;不确定通过 SSL/TLS 是否不同) - 我想用于代理服务器的机器运行的是 FreeBSD 10.1-STABLE
- 我可能会使用 Dovecot 作为 MDA,使用 Sendmail 或 Postfix 作为 MTA。我愿意使用其他软件,只要它在 FreeBSD 上得到很好的支持。
- 外发邮件的 SMTP 仍将直接发送到我们的 VPOP3 服务器
我考虑过的选项(但并不一定会被排除):
- 这个问题
[4]
讨论了类似的事情,但由于缺乏问题细节,很难判断这是否是我想要的。我查看了imapc
dovecot 上提到的那个问题的唯一答案,它看起来像可能适用于我的应用程序(特别是在阅读此邮件列表帖子之后[5]
),但我还没有发现是否可以按照上面描述的方式对其进行配置。 - 这个问题
[6]
有些类似,但是没有答案。 - 我见过的其他潜在选项包括 OfflineIMAP
[7]
、 imapsync[8]
、 fetchmail[9]
和 getmail[10]
...但我还没有发现其中任何一个是否真的能按照我想要的方式运行。 OfflineIMAP 似乎更像是一个消息缓存; imapsync 似乎是付费的,没有试用版; fetchmail 似乎是 IMAP 到 SMTP 网关(我不认为这是我想要的); getmail 似乎是基于每个用户进行配置的。 - 请注意我不是与我在最后两个要点中提到的五个选项中的任何一个相反...我只是还没有找到一种方法来配置它们中的任何一个以满足我上面编号的“要求”。
[1] www.pscs.co.uk/products/vpop3/enterprise.php
[2] www.pscs.co.uk/manual/index.html?services_imap_advanced.html
[3] wiki.pscs.co.uk/reference:imap4_advanced?s[]=idle
[4] serverfault.com/questions/458015/imap-proxy-with-message-cache
[5] dovecot.org/pipermail/dovecot/2013-June/090884.html
[6] serverfault.com/questions/500591/fetch-all-mail-from-an-imap-server-with-postfix-to-distribute-on-local-imap-serv
[7] offlineimap.org
[8] imapsync.lamiral.info
[9] www.fetchmail.info
[10]pyropus.ca/software/getmail/
答案1
main.c: * If this token is IDLE, discard it.
main.c: if ( ! strncasecmp( CP, "IDLE", strlen( "IDLE" ) ) )
如果“IMAP 代理”http://squirrelmail.org/download.php#imap_proxy那么IDLE能力就被丢弃了。也许很难实现它的功能。