LINUX.ORG.RU

ImapGoose - средство синхронизации email

 ,


0

3

Месяц назад был представлен 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 ()
Последнее исправление: hobbit (всего исправлений: 2)
Ответ на: комментарий от hobbit

ну вообще тут про релиз софта. В целом мне все равно, могу куда угодно запостить.

Lrrr ★★★★★
() автор топика

В отличие от OfflineIMAP и подобных программ, ImapGoose не проверяет почту раз в N минут, а поддерживает непрерывное соединение с сервером и реагирует на обновления немедленно.

Я бы не назвал это преимуществом. isync/OfflineIMAP (последний фактически сдох, так как был написан на Python 2.7, который выкинули из всех репозиториев уже достаточно давно, автор что-то писал на замену, но так до сих пор и не дописал) запустил дома, синхронизировал и поехал в лес сычевать в землянке. А сабж за это время просто засрёт ошибками лог, забив весь диск.

Кроме того, ImapGoose написан на Go с минимумом зависимостей.

В сравнении с OfflineIMAP это сильное преимущество, но у isync тоже один файл тоже один файл, так что тут как посмотреть. Во всяком случае это не минус.

В отличие от goimapnotify, ImapGoose использует не IMAP IDLE, а IMAP NOTIFY - это более новое расширение позволяет использовать одно подключение, чтобы следить за несколькими папками (вместо одного подключения на папку в случае с IDLE).

Поддержка обоих (IDLE в качестве fallback) было бы рациональнее. Как раз на тот случай, когда сервер не поддерживает NOTIFY. Хотя всё ещё не вижу смысла в поддержании соединения.

ImapGoose требует поддержки сервером следующих IMAP-расширений:

требует

Вот это не очень хорошо. Чаще всего ты не выбираешь сервер а пользуешься тем, что выдали на работе. Да, ты можешь пересылать на подкроватный сервер, где у тебя стоит почтовый сервер со всеми нужными расширениями, но ради синхронизации — ну такое.

Конфигурация

Конфиг выглядит понятно (камень в сторону и OfflineIMAP, которым я пользовался раньше, и в сторону isync, которым я пользуюсь сейчас).

Вместо password можно использовать password-cmd для получения пароля из внешней программы.

Это умеют и OfflineIMAP, и isync. И было бы фейспалмово, если бы сабж этого не умел. (=


Свою аудиторию оно, надеюсь, найдёт, тем более что именно таких решений не так много.

mord0d ★★★★★
()
Ответ на: комментарий от mord0d

Поддержка обоих (IDLE в качестве fallback) было бы рациональнее

ну это уже идеология автора - с фоллбеками получается усложнение кода, а он этого не хочет. Он прямо говорит, если нужный вам сервер не поддерживает все эти NOTIFY - то пользуйтесь тем софтом который уже есть.

У меня кстати запилен свой велосипед на Go для работы с IDLE. Как-то давно накодил его за пару часов чисто для того чтобы посмотреть как работает библиотека go-imap/v2 (goimapnotify использует v1) - и ничего, с тех пор нормально работает.

Lrrr ★★★★★
() автор топика
Ответ на: комментарий от Lrrr

ну это уже идеология автора - с фоллбеками получается усложнение кода, а он этого не хочет.

В принципе понятно, но всё равно не рационально. (=

У меня кстати запилен свой велосипед на Go для работы с IDLE. Как-то давно накодил его за пару часов чисто для того чтобы посмотреть как работает библиотека go-imap/v2 (goimapnotify использует v1) - и ничего, с тех пор нормально работает.

Я всё ещё не понимаю зачем поддерживать соединение. Какой юзкейс?

mord0d ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.