Как я могу использовать Mutt с локальным хранилищем, IMAP и мгновенным отправлением новой электронной почты?

8

Я думаю о переходе muttна электронную почту. Однако у меня есть несколько требований.

  1. Я хотел бы иметь возможность хранить электронную почту в автономном режиме.
  2. Я хотел бы, чтобы электронная почта была немедленно отправлена ​​на мой локальный компьютер, а не на периодический опрос (например, с использованием IMAP IDLE).

Для автономного хранения я мог бы использовать imapofflineили isync. Я понимаю, что последний более стабильный. Однако, чтобы отправлять электронную почту по требованию, единственная опция, которую я нашел для isync - это mswatch . К сожалению, это требует установки программы на удаленном почтовом сервере, что невозможно. Есть ли решение, которое позволит мне использовать muttавтономное хранение электронной почты и мгновенную доставку электронной почты?

Sparhawk
источник
Рассматривали ли вы вопрос системного администратора вашего почтового сервера?
Cas
@cas Да, но я подумал, что проще и быстрее проверить это самому. И более «окончательный» ответ, так как это, вероятно, редкий случай.
Sparhawk
Вы должны спросить их в любом случае, потому что они могут возражать против того, чтобы вы устанавливали mswatch или другое программное обеспечение на их сервер
cas
@cas Возможно, я неправильно понял, но я думал, что mswatch был установлен только локально.
Sparhawk
1
на веб-сайте mswatch говорится: «mswatch отслеживает изменения в почтовых хранилищах, запуская себя как на клиенте, так и на сервере (необходим доступ к каждому из них)». Я предполагаю, что это означает, что он должен быть установлен на обоих.
Cas

Ответы:

5

Единственный способ немедленно «отправить» почту вашему клиенту - это сделать это на сервере, как только почта будет доставлена. Это неизбежно потребует установки и запуска программного обеспечения на почтовом сервере, поэтому каждое потенциальное решение будет иметь ту же проблему, что и mswatch.

Частые опросы, вероятно, ваш лучший вариант.

По моему опыту, запуск offlineimapили подобное из cron каждые несколько минут работает достаточно хорошо.

Некоторые программы извлечения изображений поддерживают команду imap IDLE. IDLE не является «push» (так как клиент все еще получает почту с сервера), но обычно приводит к почти мгновенному обновлению вашего локального почтового ящика.

offlineimap поддерживает его, но в руководстве говорится: «Поддержка IDLE неполная и экспериментальная. Могут встречаться ошибки».

fetchmail поддерживает IDLE начиная с версии 5.0

саз
источник
Возможно (снова) я неправильно понимаю. В настоящее время с Thunderbird я могу установить для него значение «Использовать команду IDLE, если сервер поддерживает это». Я думаю, что это устанавливает постоянное соединение с почтовым сервером, поэтому доставка почты происходит мгновенно. Это прекрасно работает для моих почтовых серверов (NetOrigin, Gmail, mail.com и т. Д.).
Sparhawk
Да, это правда. но практически нет никакой разницы для конечного пользователя или нет - IDLE поддерживает соединение открытым (используя такие ресурсы, как файловые дескрипторы на сервере), а опрос часто подключается и отключается. с опросом немного больше накладных расходов, но если ваш почтовый сервер не справляется с этим, то есть большие проблемы, которые сисадмины должны решить.
Cas
Кстати, offlineimapесть некоторая поддержка для IDLE, но в руководстве говорится: «Поддержка IDLE неполная и экспериментальная. Могут встречаться ошибки».
Cas
По моему опыту IDLE имеет (самое большее) задержку в несколько секунд перед получением электронной почты. OTOH, у многих почтовых клиентов время опроса по умолчанию составляет порядка 5 минут. Я полагаю, что установка (скажем) 10 секунд не будет идеальной. По поиску в Интернете ранний хит говорит Don't set the automatic send/receive interval too short [less than 5 minutes] or you could end up endlessly polling the mail server, send/receive errors and sometimes even duplicates (хотя это для конкретного клиента).
Ястреб
fetchmailтакже поддерживает простаивает с v5.0 fetchmail.info/fetchmail-features.html
Cas
4

К сожалению, две возможности, предложенные в другом ответе, были несовершенны. offlineimapбыл довольно глючным в лучшие времена. Например, нет способа автоматически запустить скрипт после получения новой почты. fetchmailне синхронизируется двунаправленно.

Вместо этого я решил использовать комбинацию imapnotify и isync . Я настроил imapnotifyзапуск скрипта при запуске новой почты (через IDLE).

Этот скрипт запускается в mbsync "${channel}:INBOX"зависимости от того, какая учетная запись имеет почту. Далее это работает notmuch new. Наконец, он записывает количество непрочитанных писем в файл, как показано ниже. Содержимое этого файла отображается на панели моего рабочего стола.

mail_count_file="/home/foo/.cache/new_mail_count"
new_count=$(find ~/.mail/*/Inbox/new -type f | wc -l)
if [[ $new_count > 0 ]]; then
  echo $new_count > "$mail_count_file"
else
  if [[ -f "$mail_count_file" ]]; then
    rm "$mail_count_file"
  fi
fi

Обновить

imapnotify (nodejs-imapnotify) регулярно отключается без предупреждений / ошибок и часто пропускает новую почту. python-imapnotify также работает с перебоями. Однако goimapnotify работает очень хорошо в моем опыте. Он редко выпадает, и когда это происходит (например, из-за отключений от сети и / или циклов приостановки), он быстро перезапускается без суеты.

Sparhawk
источник
Вы можете запустить скрипт сразу после получения почты offlineimap: используя postsynchookопцию в конфигурации; вот как я бегу notmuch new...
Джейсонвриан
@jasonwryan Это специально для IDLE? Я не на 100%, если я правильно понимаю, но это говорит"No hook exists for “run after an IDLE response”. Email will show up, but may not be processed until the next refresh cycle."
Sparhawk
Нет, я не использую Idle ...
Jasonwryan