web-dev-qa-db-ja.com

ローカルストレージ、IMAP、新しいメールの即時プッシュでmuttを使用するにはどうすればよいですか?

メールをmuttに切り替えることを検討しています。ただし、いくつかの要件があります。

  1. メールをオフラインで保存したいのですが。
  2. 定期的なポーリング(IMAP IDLEの使用など)ではなく、メールをすぐにローカルコンピューターにプッシュしたいのですが。

オフラインストレージの場合、imapofflineまたはisyncを使用できます。後者の方が安定していると思います。ただし、電子メールをオンデマンドでプッシュするために、isyncで見つけた唯一のオプションは mswatch です。残念ながら、これにはリモート電子メールサーバーにプログラムをインストールする必要がありますが、これは不可能です。オフラインの電子メールストレージと即時の電子メール配信でmuttを使用できるようにするソリューションはありますか?

8
Sparhawk

残念ながら、他の answer で提案された2つの可能性は不完全でした。 offlineimapは、最高の状態ではかなりバグがありました。たとえば、新着メールが到着した後にスクリプトを自動的に実行する方法はありません。 fetchmailは双方向で同期しません。

代わりに、私が使用することになったソリューションは、 imapnotifyisync の組み合わせでした。 (IDLEを介して)新着メールがトリガーされたときにスクリプトを実行するようにimapnotifyを構成しました。

このスクリプトは、メールを持っているアカウントに応じて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 は私の経験では非常にうまく機能します。ドロップアウトすることはめったになく、ドロップアウトすると(たとえば、ネットワークの切断やサイクルの一時停止が原因で)、大騒ぎせずにすばやく再起動します。

4
Sparhawk

メールをクライアントにすぐに「プッシュ」する唯一の方法は、メールが配信されるとすぐにサーバーがそれを行うことです。これには必然的にソフトウェアをメールサーバーにインストールして実行する必要があるため、考えられるすべてのソリューションでmswatchと同じ問題が発生します。

頻繁なポーリングがおそらく最良の選択肢です。

私の経験では、cronから数分ごとにofflineimapまたは同様のものを実行することで十分に機能します。

一部のimapフェッチプログラムは、imapIDLEコマンドをサポートしています。 IDLEは正確には「プッシュ」ではありませんが(メールはクライアントによってサーバーからプルされているため)、通常、ローカルメールボックスはほぼ瞬時に更新されます。

offlineimap はサポートしていますが、マニュアルには「IDLEのサポートは不完全で実験的です。バグが発生する可能性があります」と記載されています。

fetchmail はバージョン5.0以降のIDLEをサポートしています

5
cas