对于我的公文包软件,我一直在使用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.rc
、fetcher.2.rc
等中分别定义的帐户。虽然电子邮件事件相对较少,但可以接受。