メールをmutt
に切り替えることを検討しています。ただし、いくつかの要件があります。
オフラインストレージの場合、imapoffline
またはisync
を使用できます。後者の方が安定していると思います。ただし、電子メールをオンデマンドでプッシュするために、isyncで見つけた唯一のオプションは mswatch です。残念ながら、これにはリモート電子メールサーバーにプログラムをインストールする必要がありますが、これは不可能です。オフラインの電子メールストレージと即時の電子メール配信でmutt
を使用できるようにするソリューションはありますか?
残念ながら、他の answer で提案された2つの可能性は不完全でした。 offlineimap
は、最高の状態ではかなりバグがありました。たとえば、新着メールが到着した後にスクリプトを自動的に実行する方法はありません。 fetchmail
は双方向で同期しません。
代わりに、私が使用することになったソリューションは、 imapnotify と isync の組み合わせでした。 (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 は私の経験では非常にうまく機能します。ドロップアウトすることはめったになく、ドロップアウトすると(たとえば、ネットワークの切断やサイクルの一時停止が原因で)、大騒ぎせずにすばやく再起動します。
メールをクライアントにすぐに「プッシュ」する唯一の方法は、メールが配信されるとすぐにサーバーがそれを行うことです。これには必然的にソフトウェアをメールサーバーにインストールして実行する必要があるため、考えられるすべてのソリューションでmswatch
と同じ問題が発生します。
頻繁なポーリングがおそらく最良の選択肢です。
私の経験では、cronから数分ごとにofflineimap
または同様のものを実行することで十分に機能します。
一部のimapフェッチプログラムは、imapIDLEコマンドをサポートしています。 IDLEは正確には「プッシュ」ではありませんが(メールはクライアントによってサーバーからプルされているため)、通常、ローカルメールボックスはほぼ瞬時に更新されます。
offlineimap はサポートしていますが、マニュアルには「IDLEのサポートは不完全で実験的です。バグが発生する可能性があります」と記載されています。
fetchmail はバージョン5.0以降のIDLEをサポートしています