ImapGoose - средство синхронизации email
Месяц назад был представлен ImapGoose - небольшой демон, который синхронизирует локальную папку email с удаленным IMAP-сервером. При этом поддерживается синхронизация в обе стороны. Стандартное название таких программ - Mail Retrieval Agent, MRA.
Преимущества по сравнению с уже существующими решениями
В отличие от OfflineIMAP и подобных программ, ImapGoose не проверяет почту раз в N минут, а поддерживает непрерывное соединение с сервером и реагирует на обновления немедленно. Кроме того, ImapGoose написан на Go с минимумом зависимостей.
В отличие от goimapnotify, ImapGoose использует не IMAP IDLE, а IMAP NOTIFY - это более новое расширение позволяет использовать одно подключение, чтобы следить за несколькими папками (вместо одного подключения на папку в случае с IDLE). Кроме того, goimapnotify не выполняет синхронизацию самостоятельно, а только запускает заданные в конфиге программы (которые надо конфигурировать отдельно) после получения IDLE-уведомлений.
Недостатки
ImapGoose требует поддержки сервером следующих IMAP-расширений:
- UIDPLUS (rfc4315, 2005)
- CONDSTORE (rfc4551, 2006)
- QRESYNC (rfc5162/rfc7162, 2008/2014)
- NOTIFY (rfc5465, 2009)
Несмотря на то что все эти расширения стандартизированы достаточно давно, их полный набор поддерживается очень немногими серверами. Вот вывод поставляемой вместе с ImapGoose утилиты capcheck для некоторых из них:
# imap.yandex.ru:993 (Yandex Mail)
✓ UIDPLUS: SUPPORTED
✗ NOTIFY: NOT SUPPORTED
✗ CONDSTORE: NOT SUPPORTED
✗ QRESYNC: NOT SUPPORTED
# imap.gmail.com:993 (GMail)
✓ UIDPLUS: SUPPORTED
✗ NOTIFY: NOT SUPPORTED
✓ CONDSTORE: SUPPORTED
✗ QRESYNC: NOT SUPPORTED
# imap.mail.me.com:993 (ICloud Mail)
✓ UIDPLUS: SUPPORTED
✗ NOTIFY: NOT SUPPORTED
✓ CONDSTORE: SUPPORTED
✓ QRESYNC: SUPPORTED
Например, Apple использует проприетарное расширение XAPPLEPUSHSERVICE вместо стандартного NOTIFY.
В моем случае сервер со всеми нужными расширениями неожиданно нашелся у используемого мной регистратора доменных имен (одного из самых популярных в России) в рамках услуги «почта для домена».
Сборка
Сборка ImapGoose выполняется командой make build, установка - командой make install. Утилита capcheck для проверки серверов собирается отдельно: make capcheck. Также в комплект включены примеры сервиса systemd и init-файла для OpenRC.
Конфигурация
$ cat ~/.config/imapgoose/config.scfg
account personal {
server imap.example.com:993
username user@example.com
password your_password_here
local-path ~/mail/
post-sync-cmd notmuch new
}
Вместо password можно использовать password-cmd для получения пароля из внешней программы. Например, если вы пользуетесь KeePassXC, то можно включить в его настройках интеграцию с Secret Service и получать пароль следующим образом:
$ secret-tool lookup Path /onetime/gmail.com
Программа secret-tool обычно содержится в пакете libsecret (по крайней мере, так обстоят дела в Arch и Alpine Linux).
Перемещено hobbit из opensource