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


8

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

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

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


メールサーバーのシステム管理者に質問することを検討しましたか?
cas

@casはい、しかし私はそれを自分でテストするだけの方が簡単かつ迅速かもしれないと考えました。そして、それはおそらくまれなケースなので、より「決定的な」答えです。
Sparhawk

彼らはあなたが彼らのサーバー上mswatchや他のソフトウェアをインストールするに反対する可能性があるので、あなたがとにかくそれらを求める必要がある
CAS

@casおそらく誤解しているかもしれませんが、mswatchはローカルにのみインストールされていると思いました。
Sparhawk

1
mswatchのWebサイトには、「mswatchはクライアントとサーバーの両方で自分自身を実行することによってメールストアの変更を監視します(それぞれにシェルアクセスが必要です)」と述べています。私はそれが両方にインストールされる必要があることを意味すると思います。
cas

回答:


5

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

頻繁なポーリングがおそらく最良のオプションです。

私の経験では、offlineimapcronから数分おきに実行することで十分に機能します。

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

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

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


おそらく(もう一度)私は誤解しています。現在Thunderbirdでは、「サーバーがサポートしている場合はIDLEコマンドを使用する」に設定できます。これにより、メールサーバーとの永続的な接続が確立され、メール配信が即座に行われると思います。これは、私のメールサーバー(NetOrigin、Gmail、mail.comなど)の初期状態で正常に機能します。
Sparhawk

はい、本当です。しかし、実際にはエンドユーザーとほとんどまたはまったく違いはありません。IDLEは(サーバー上のファイル記述子などのリソースを使用して)接続を開いたままにし、ポーリングは頻繁に接続と切断を行います。ポーリングのオーバーヘッドはわずかに多くなりますが、メールサーバーがそれを処理できない場合は、システム管理者が解決する必要のある大きな問題があります。
cas

ところで、offlineimapIDLEはある程度サポートされていますが、マニュアルには「IDLEのサポートは不完全で実験的なものです。バグが発生する可能性があります」と書かれています。
cas

私の経験では、IDLEは(最大で)メールをフェッチする前に数秒の遅延があります。OTOH、多くの電子メールクライアントのデフォルトのポーリング時間は約5分です。(たとえば)10秒に設定するのは理想的ではないと思います。Webの検索から、初期のヒット 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(これは特定のクライアント向けですが)と言います。
Sparhawk 2015


4

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

代わりに、私が最終的に使用したソリューションは、imapnotifyisyncの組み合わせでした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は私の経験では非常にうまく機能します。ドロップアウトが発生することはめったになく、ドロップすると(たとえば、ネットワークの切断やサスペンドサイクルのため)、手間をかけずにすぐに再起動します。


メールが到着した直後にスクリプトを実行できます。設定のオプションofflineimapを使用しpostsynchookます。それが私が走る方法notmuch newです...
jasonwryan

@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

いいえ、私はアイドルを使用しません...
jasonwryan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.