Чтение из нескольких imap.gmail.com из одного и того же клиента fetchmail
Для моего портфолио программного обеспечения я использую fetchmail
читать из учетной записи электронной почты Google через IMAP, и жизнь была отличной. Благодаря чуду простаивающего соединения, поддерживаемого imap3, мои триггеры срабатывают почти в реальном времени из-за пересылки на сервер, гораздо раньше, чем периодический опрос разрешил бы иначе.
В моем основном .fetchmailrc
настройка, при которой учетная запись брокерского клиента отправляет торговые уведомления по электронной почте в специальный ящик Gmail/Google Apps.
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 и Служб Google от одного и того же клиента (например, Thunderbird) и никогда не замечал эту проблему исключительности.
Я не пробовал запускать несколько демонов fetchmail, используя отдельные файлы -f config (при условии, что они не будут конфликтовать), или дополнительно развертывал один или несколько getmail и других подобных сборщиков электронной почты. Все еще пытаюсь избежать такого беспорядка - не масштабируемый тем больше ящиков должен контролировать.
1 ответ
У меня нет ссылки, но где-то в fetchmail
Документы, которые я помню, я читал, что в режиме ожидания это не столько функция imap, сколько необязательный трюк fetchmail, который имеет (неприятный для меня) побочный эффект, заключающийся в отключении всех других определенных учетных записей от опроса, пока соединение не будет прервано каким-либо внешним событием или тайм-аут. По крайней мере, это оправдало бы Google.
Благодарим Карла в блоге Whine Rack за несколько советов.
Сейчас я использую killall fetchmail; fetchmail -f fetcher.$[$RANDOM % $numaccounts].rc
периодически от crontab
цикл чтения учетных записей, каждый из которых определяется в fetcher.1.rc
, fetcher.2.rc
и т. д. Приемлемо, когда события электронной почты относительно редки.