Wie kann ich mutt mit lokalem Speicher, IMAP und sofortigem Pushing neuer E-Mails verwenden?

8

Ich denke darüber nach, muttzu E-Mail zu wechseln . Ich habe jedoch einige Anforderungen.

  1. Ich möchte die E-Mail offline speichern können.
  2. Ich möchte, dass E-Mails sofort an meinen lokalen Computer gesendet werden, im Gegensatz zu regelmäßigen Abfragen (z. B. mithilfe von IMAP IDLE).

Für die Offline-Speicherung könnte ich imapofflineoder verwenden isync. Ich verstehe, dass Letzteres stabiler ist. Die einzige Option, die ich für isync gefunden habe, ist mswatch . Leider muss hierfür ein Programm auf dem Remote-E-Mail-Server installiert sein, was nicht möglich ist. Gibt es eine Lösung, die ich muttmit Offline-E-Mail-Speicherung und sofortiger E-Mail-Zustellung verwenden kann?

Sparhawk
quelle
Haben Sie darüber nachgedacht, den Systemadministrator Ihres E-Mail-Servers zu fragen?
Cas
@cas Ja, aber ich dachte, es könnte einfacher und schneller sein, es einfach selbst zu testen. Und eine "endgültigere" Antwort, da dies wahrscheinlich ein seltener Fall ist.
Sparhawk
Sie sollten sie auf jeden Fall fragen , weil sie Ihnen die Installation mswatch oder andere Software auf ihrem Server - Objekt kann
cas
@cas Vielleicht verstehe ich das falsch, aber ich dachte, dass mswatch nur lokal installiert wurde.
Sparhawk
1
Auf der mswatch-Website heißt es: "mswatch überwacht Mailstores auf Änderungen, indem es sich selbst auf dem Client und dem Server ausführt (Shell-Zugriff auf jeden ist erforderlich)." Ich nehme an, das bedeutet, dass es auf beiden installiert werden muss.
Cas

Antworten:

5

Die einzige Möglichkeit, E-Mails sofort an Ihren Client zu senden, besteht darin, dass der Server dies tut, sobald die E-Mails zugestellt werden. Dies erfordert zwangsläufig die Installation und Ausführung von Software auf dem Mailserver, sodass jede mögliche Lösung das gleiche Problem wie hat mswatch.

Häufiges Abrufen ist wahrscheinlich die beste Option.

Nach meiner Erfahrung offlineimapfunktioniert es gut genug, alle paar Minuten von cron aus zu laufen oder ähnliches.

Einige Imap-Abrufprogramme unterstützen den Befehl imap IDLE. IDLE ist nicht genau "Push" (da die E-Mail vom Client immer noch vom Server abgerufen wird), führt jedoch im Allgemeinen zu fast sofortigen Aktualisierungen Ihrer lokalen Mailbox.

offlineimap unterstützt dies, im Handbuch heißt es jedoch: "Die IDLE-Unterstützung ist unvollständig und experimentell. Möglicherweise treten Fehler auf."

fetchmail unterstützt IDLE seit Version 5.0

cas
quelle
Vielleicht verstehe ich (wieder) falsch. Derzeit kann ich mit Thunderbird den Befehl "IDLE-Befehl verwenden, wenn der Server dies unterstützt" festlegen. Ich denke, dies stellt eine dauerhafte Verbindung mit dem E-Mail-Server her, so dass die E-Mail-Zustellung sofort erfolgt. Dies funktioniert sofort für meine E-Mail-Server (NetOrigin, Gmail, mail.com usw.).
Sparhawk
ja das stimmt. Für den Endbenutzer gibt es jedoch praktisch keinen oder nur einen geringen Unterschied: IDLE hält eine Verbindung offen (unter Verwendung von Ressourcen wie Dateideskriptoren auf dem Server), und beim Abrufen werden häufig Verbindungen hergestellt und getrennt. Das Abrufen ist etwas aufwändiger, aber wenn Ihr Mailserver damit nicht fertig wird, müssen die Systemadministratoren größere Probleme lösen.
Cas
Übrigens, offlineimaphat etwas Unterstützung für IDLE, aber das Handbuch sagt "IDLE-Unterstützung ist unvollständig und experimentell. Es können Fehler auftreten."
Cas
Nach meiner Erfahrung hat IDLE (höchstens) einige Sekunden Verzögerung, bevor die E-Mail abgerufen wird. OTOH, viele E-Mail-Clients haben eine Standardabrufzeit in der Größenordnung von ~ 5 Minuten. Ich würde mir vorstellen, dass es nicht ideal wäre, es auf (sagen wir) 10 Sekunden einzustellen. Von der Suche im Internet, ein früher Hit sagt 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 (obwohl dies für einen bestimmten Client ist).
Sparhawk
fetchmailunterstützt auch IDLE seit v5.0 fetchmail.info/fetchmail-features.html
cas
4

Leider waren die beiden in der anderen Antwort vorgeschlagenen Möglichkeiten unvollkommen. offlineimapwar im besten Fall ziemlich fehlerhaft. Beispielsweise gibt es keine Möglichkeit, ein Skript automatisch auszuführen, nachdem neue E-Mails eingegangen sind. fetchmailsynchronisiert nicht bidirektional.

Stattdessen war die Lösung, die ich letztendlich verwendete, eine Kombination aus Imapnotify und Isync . Ich habe konfiguriert imapnotify, dass ein Skript ausgeführt wird, wenn neue E-Mails ausgelöst werden (über IDLE).

Dieses Skript wird mbsync "${channel}:INBOX"abhängig davon ausgeführt, welches Konto über E-Mails verfügt. Als nächstes läuft es notmuch new. Schließlich wird die Anzahl der ungelesenen E-Mails in einer Datei wie folgt aufgezeichnet. Der Inhalt dieser Datei wird in einem Bereich meiner Desktop-Umgebung angezeigt.

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

Aktualisieren

imapnotify (nodejs-imapnotify) trennt die Verbindung regelmäßig ohne Warnungen / Fehler und verpasst häufig neue E-Mails. python-imapnotify funktioniert auch zeitweise. Allerdings funktioniert goimapnotify meiner Erfahrung nach sehr gut. Es fällt selten aus, und wenn dies der Fall ist (z. B. aufgrund von Netzwerkabbrüchen und / oder Unterbrechungszyklen), startet es sich schnell und ohne großen Aufwand neu.

Sparhawk
quelle
Sie können ein Skript sofort nach dem Eintreffen der E-Mail ausführen mit offlineimap: Verwenden Sie die postsynchookOption in der Konfiguration; So notmuch new
renne
@ Jasonwryan Ist das speziell für IDLE? Ich bin nicht 100%, wenn ich richtig verstehe, aber das sagt"No hook exists for “run after an IDLE response”. Email will show up, but may not be processed until the next refresh cycle."
Sparhawk
Nein, ich benutze nicht Idle ...
Jasonwryan