Для своего портфельного программного обеспечения я использовал 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 и других подобных сборщиков электронной почты. Все еще пытаюсь избежать такого беспорядка - не масштабируемый тем больше ящиков, которые я должен отслеживать.