чтение из нескольких imap.gmail.com из одного и того же клиента fetchmail - PullRequest
0 голосов
/ 08 февраля 2012

Для своего портфельного программного обеспечения я использовал fetchmail для чтения из учетной записи электронной почты Google через IMAP, и жизнь была великолепной. Благодаря чуду соединения idle , поддерживаемого 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, которые я написал. Нет проблем, просто добавьте больше poll строк к .fetchmailrc, верно? Ну, это не работает, когда другие учетные записи также используют imap.gmail.com . В итоге происходит то, что в то время как одна учетная запись читается нормально (и не обязательно первая из перечисленных, хотя обычно да), другая получает «ошибка сокета» весь день, а электронные письма остаются нетронутыми, непрочитанными. Я не могу понять, почему и даже не уверен, что это какой-то механизм на imap.gmail.com или нет, например. ограничение одним IMAP-соединением с хоста. Это кажется неправильным, поскольку я годами сохранял соединения IMAP со многими отдельными учетными записями Gmail и Служб Google от одного и того же клиента (например, Thunderbird ) и никогда не замечал эту проблему исключительности.

Я не пробовал запускать несколько демонов fetchmail, используя отдельные файлы конфигурации -f (при условии, что они не конфликтуют), или дополнительно развертывал один или несколько getmail и других подобных сборщиков электронной почты. Все еще пытаюсь избежать такого беспорядка - не масштабируемый тем больше ящиков, которые я должен отслеживать.

1 Ответ

0 голосов
/ 13 февраля 2012

Ссылка отсутствует, но где-то в документах fetchmail я вспоминаю, что читал, что idle - это не столько функция imap , сколько дополнительный трюк fetchmail, который имеет (неприятный для меня) побочный эффект, заключающийся в отключении всех других определенных учетных записей от опроса, пока соединение не будет прервано каким-либо внешним событием или тайм-аутом. По крайней мере, это оправдало бы Google.

Благодарю Блог Carl's Whine Rack за некоторые советы.

На данный момент я периодически использую killall fetchmail; fetchmail -f fetcher.$[$RANDOM % $numaccounts].rc из crontab для циклического чтения учетных записей, каждый из которых определяется индивидуально в fetcher.1.rc, fetcher.2.rc и т. Д. Приемлемо, хотя события электронной почты относительно редки.

...