从同一个fetchmail客户端读取多个imap.gmail.com



对于我的公文包软件,我一直在使用fetchmail通过IMAP从谷歌电子邮件帐户中读取内容,生活非常棒。由于imap3支持空闲连接的奇迹,由于服务器推送,我的触发器几乎实时启动,比定期轮询允许的要快得多。

在我的基本.fetchmailrc设置中,经纪客户的账户通过电子邮件将交易通知发送到专用的Gmail/谷歌应用程序框,我有

poll imap.gmail.com proto imap user "youraddress@yourdomain-OR-gmail.com" pass "yoMama"  keep nofetchall ssl  idle mimedecode limit 29000 no rewrite mda "myCustomSpecialMDAhandler.sh  %F %T"

问题是,现在我需要支持从多个邮箱中阅读,并将电子邮件交给我编写的其他专门的MDA脚本。没问题,只需在.fetchmailrc中添加更多轮询行,对吗?当其他帐户也使用imap.gmail.com时,这是不起作用的。最终发生的情况是,虽然一个帐户读起来很好(不一定是列出的第一个,尽管通常是肯定的),但另一个帐户整天都在读"套接字错误",并且电子邮件保持未读状态。我不知道为什么,甚至不确定imap.gmail.com是否有某种机制,例如限制从主机连接到一个IMAP。这似乎是不对的,因为我一直保持IMAP连接到许多单独的Gmail和amp;多年来,来自同一客户的谷歌应用程序帐户(如雷鸟)从未注意到这个排他性问题。

我还没有尝试使用单独的-f配置文件启动多个fetchmail守护进程(假设它们不会冲突),或者部署一个或多个getmail和其他类似的电子邮件fetcher。仍在努力避免这种混乱——我要监控的盒子越多,就越不容易。

没有现成的引用,但在fetchmail的文档中,我记得读到idle与其说是imap功能,不如说是一个fetchmail可选技巧,它有一个(对我来说很讨厌的)副作用,即阻止所有其他定义的帐户进行轮询,直到某个外部事件或超时切断连接。因此,至少这将证明谷歌是正确的。

卡尔的Whine Rack博客提供了一些提示。

目前,我从crontab定期使用killall fetchmail; fetchmail -f fetcher.$[$RANDOM % $numaccounts].rc来循环阅读fetcher.1.rcfetcher.2.rc等中分别定义的帐户。虽然电子邮件事件相对较少,但可以接受。

最新更新