Bagaimana saya bisa menggunakan mutt dengan penyimpanan lokal, IMAP dan mendorong email baru secara instan?

8

Saya sedang berpikir untuk beralih ke muttuntuk email. Namun, saya punya beberapa persyaratan.

  1. Saya ingin dapat menyimpan email secara offline.
  2. Saya ingin surel segera dikirim ke komputer lokal saya sebagai lawan jajak pendapat berkala (misalnya menggunakan IMAP IDLE).

Untuk penyimpanan offline, saya bisa menggunakan imapofflineatau isync. Saya mengerti bahwa yang terakhir lebih stabil. Namun, untuk mendorong email sesuai permintaan, satu-satunya opsi yang saya temukan untuk isync adalah mswatch . Sayangnya, ini membutuhkan program untuk diinstal pada server email jarak jauh, yang tidak mungkin. Apakah ada solusi yang memungkinkan saya untuk menggunakannya mutt, dengan penyimpanan email offline dan pengiriman email instan?

Sparhawk
sumber
Sudahkah Anda mempertimbangkan untuk menanyakan sysadmin server email Anda?
cas
@cas Ya, tapi saya pikir mungkin lebih mudah dan cepat untuk mengujinya sendiri. Dan jawaban yang lebih "pasti", karena itu mungkin kasus yang jarang.
Sparhawk
Anda harus tetap bertanya kepada mereka karena mereka mungkin keberatan jika Anda menginstal mswatch atau perangkat lunak lain di server mereka
cas
@cas Mungkin saya salah paham, tapi saya pikir mswatch hanya diinstal secara lokal.
Sparhawk
1
situs web mswatch mengatakan "mswatch memonitor toko surat untuk perubahan dengan menjalankan sendiri pada klien dan server (diperlukan akses shell untuk masing-masing)". Saya kira itu berarti perlu diinstal pada keduanya.
cas

Jawaban:

5

Satu-satunya cara untuk 'mendorong' surat langsung ke klien Anda adalah agar server melakukannya segera setelah surat dikirimkan. Ini pasti akan membutuhkan perangkat lunak untuk diinstal dan dijalankan pada server mail, sehingga setiap solusi potensial akan memiliki masalah yang sama mswatch.

Polling yang sering adalah pilihan terbaik Anda.

Dalam pengalaman saya, berlari offlineimapatau serupa dari cron setiap beberapa menit bekerja dengan cukup baik.

Beberapa program pengambilan imap mendukung perintah imap IDLE. IDLE bukan 'push' (karena surat masih ditarik dari server oleh klien) tetapi umumnya menghasilkan pembaruan yang hampir instan ke kotak surat lokal Anda.

offlineimap mendukungnya tetapi manual mengatakan "dukungan IDLE tidak lengkap dan eksperimental. Bug mungkin ditemui."

fetchmail mendukung IDLE sejak versi 5.0

cas
sumber
Mungkin (lagi) saya salah paham. Saat ini dengan Thunderbird, saya dapat mengaturnya untuk "Gunakan perintah IDLE jika server mendukungnya". Saya pikir ini mengatur koneksi permanen dengan server email, sehingga pengiriman email instan. Ini berfungsi dengan baik di luar kotak untuk server email saya (NetOrigin, Gmail, mail.com, dll.).
Sparhawk
ya itu benar. tetapi secara praktis ada sedikit atau tidak ada perbedaan pada pengguna akhir - IDLE membuat koneksi tetap terbuka (menggunakan sumber daya seperti deskriptor file di server), dan polling sering menghubungkan & memutus sambungan. ada sedikit lebih banyak overhead dengan polling, tetapi jika server email Anda tidak dapat mengatasinya maka ada masalah yang lebih besar untuk dipecahkan oleh sysadmin.
cas
BTW, offlineimapmemiliki beberapa dukungan untuk IDLE tetapi manual mengatakan "dukungan IDLE tidak lengkap dan eksperimental. Bug mungkin ditemui."
cas
Dalam pengalaman saya IDLE memiliki (paling banyak) penundaan beberapa detik sebelum mengambil email. OTOH, banyak klien email memiliki waktu pemungutan suara standar dari urutan ~ 5 menit. Saya akan membayangkan bahwa pengaturan ke (katakanlah) 10 detik tidak akan ideal. Dari pencarian di web, hit awal mengatakan 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 (meskipun ini untuk klien tertentu).
Sparhawk
fetchmailjuga mendukung IDLE sejak v5.0 fetchmail.info/fetchmail-features.html
cas
4

Sayangnya, dua kemungkinan yang disarankan dalam jawaban lainnya tidak sempurna. offlineimapcukup buggy pada saat terbaik. Misalnya, tidak ada cara untuk menjalankan skrip secara otomatis setelah surat baru diterima. fetchmailtidak menyinkronkan dua arah.

Alih-alih, solusi yang akhirnya saya gunakan adalah kombinasi dari imapnotify dan isync . Saya dikonfigurasi imapnotifyuntuk menjalankan skrip ketika surat baru dipicu (via IDLE).

Skrip ini berjalan mbsync "${channel}:INBOX"tergantung pada akun mana yang memiliki surat. Selanjutnya berjalan notmuch new. Akhirnya, ini mencatat jumlah email yang belum dibaca ke file seperti di bawah ini. Isi file ini ditampilkan pada panel lingkungan desktop saya.

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

Memperbarui

imapnotify (nodejs-imapnotify) terputus secara teratur tanpa peringatan / kesalahan, dan sering melewatkan email baru. python-imapnotify juga bekerja sebentar-sebentar. Namun, goimapnotify berfungsi sangat baik dalam pengalaman saya. Ini jarang keluar, dan ketika itu terjadi (misalnya karena jaringan terputus dan / atau menunda siklus), ia dengan cepat restart sendiri tanpa ribut-ribut.

Sparhawk
sumber
Anda dapat menjalankan skrip segera setelah surat diterima dengan offlineimap: menggunakan postsynchookopsi di konfigurasi; begitulah cara saya berlari notmuch new...
jasonwryan
@jasonwryan Apakah itu khusus untuk IDLE? Saya tidak 100% jika saya mengerti dengan benar, tetapi ini mengatakan"No hook exists for “run after an IDLE response”. Email will show up, but may not be processed until the next refresh cycle."
Sparhawk
Tidak, saya tidak menggunakan Idle ...
jasonwryan