Emails in Emacs (speziell Proton Mail)
Ich hatte am 18. April kurz darüber geschrieben, dass ich meinen Proton Mail Account in Emacs eingerichtet habe. Da alles stabil läuft und ich sehr zufrieden damit bin, meine Emails in Emacs zu lesen, schreibe ich heute die Anleitung. Insbesondere in Verbindung mit Proton Mail gibt es doch ein oder zwei Dinge zu beachten.
Vorbemerkung zu Proton Mail
Wie beschrieben habe ich einen Email-Account bei Proton Mail. Im Gegensatz zu anderen Emailanbietern liegen die Emails verschlüsselt auf den Servern. Es gibt keinen Weg, per IMAP auf die Emails zuzugreifen. Dafür hat Proton die Mail Bridge entwickelt. Diese Mailbridge lädt die Emails herunter und entschlüsselt sie dann lokal. Emailprogramme können dann lokal per IMAP auf die Bridge zugreifen. Die Bridge bietet auch SMTP für den Versand an.
Vorbemerkung zu Emacs
In Emacs habe ich mich für Mu4e entschieden. Mu4e nutzt den Index, den Mu aufgebaut hat. Es ist quasi dann eine lokale Suchmaschine für die eigenen Emails. Mu4e ist dann das Frontend in Emacs um die Suche zu nutzen und auf die Emails zuzugreifen. Wie ich bereits am 18. 04. geschrieben habe, ist das alles extrem schnell. Soweit ich es verstehe, kennt Mu keine Labels wie man es von anderen Emailprovidern ggf. kennt. Es arbeitet mit Ordnern. Also eher klassisch.
Einrichtung
Ordner für die Emails anlegen
Ich habe im Homeverzeichnis den Ordner Mail angelegt. Dieser Ordner wird später für die Speicherung der EMails verwendet.
Proton Mail Bridge
Wir müssen als erstes die Proton Mail Bridge installieren. In openSUSE Tumbleweed gibt es die Bridge nicht als natives Paket. Daher habe ich das Flatpak eingerichtet. Die Einrichtung erfolgt über einen Assistenten. Man muss sich lediglich in der Bridge einmal mit seinem Proton Mail Account anmelden. Dann beginnt die Bridge bereits die Emails herunterzuladen. Bei mir hat das sehr lange gedauert (ca. eine Stunde). Ich habe aber auch ca. 30.000 Emails in dem Postfach. Man kann aber mit der weiteren Einrichtung fortfahren und die Protonbridge im Hintergrund laufen lassen.
Wichtig: Die Bridge sollte automatisch gestartet werden, wenn man sich am Computer anmeldet. Sonst bekommt man keine neuen Emails.
Wir benötigen aus der Bridge noch das Zertifikat für ein weiteres Programm. Das Zertifikat kann in den „advanced settings“ unter „Export TLS certificates“ exportiert werden. Ich habe das Zertifikat in meinem Mail Ordner gespeichert. Es kann aber auch an einem anderen Ort abgelegt werden. Wir müssen den Ort für die weiteren Sync-Programme in der Konfiguration angeben. Die Daten für den Imap- und SMTP-Server sowie das Passwort benötigen wir ebenfalls gleich.
Pakete für Sync, Mu, etc installieren
Damit wir die Emails im Mail-Ordner synchronisieren, verwenden wir mbsync. Für den Versand verwenden wir msmtp. Und dann benötigen wir noch Mu und Mu4e. Unter Tumbleweed sind alle Pakete im Repository vorhanden und können wie folgt installiert werden:
sudo zypper in isync msmtp maildir-utils w3m mu4e
mbsync einrichten
mbsync erledigt für uns die Arbeit die Emails im Mail-Verzeichnis zu synchronisieren. Damit mbsync funktioniert, benötigt es die Informationen wie Zugangsdaten zu unserer Mail-Bridge (oder Imap), Zielordner, Zertifikat, etc. Für Proton habe ich bei mir folgende Konfiguration unter ~./mbsyncrc ~ angelegt.
# 1. DER ZUGANG (Dein Proton-Konto in der Bridge)
IMAPAccount protonmail
Host 127.0.0.1
Port 1143
User xxx@proton.me
Pass yyy
TLSType STARTTLS
TLSVersions +1.2
AuthMechs LOGIN
# Hier sagen wir mbsync, dass es dem Zertifikat der Flatpak-Bridge vertrauen soll:
CertificateFile ~/Mail/cert.pem
# 2. DER FERNE SPEICHER (Proton Server via Bridge)
IMAPStore protonmail-remote
Account protonmail
# 3. DER LOKALE SPEICHER (Dein Rechner)
MaildirStore protonmail-local
Subfolders Verbatim
Path ~/Mail/
Inbox ~/Mail/INBOX
# 4. DIE VERBINDUNG (Was soll synchronisiert werden?)
Channel protonmail
Far :protonmail-remote:
Near :protonmail-local:
Patterns INBOX Drafts Sent Trash Archive Spam
Create Near
SyncState *
Sync all
Expunge Near
Expunge Far
Ich werde nicht sämtliche Parameter erklären. Wichtig sind aber die Patterns, Syncstate, Sync all und Expunge. Die Konfiguration sorgt so dafür, dass Emails beim Löschen in den Ordner Trash verschoben werden. Ich hatte zuerst mit direktem Löschen experimentiert. Das hat aber dann zu Dubletten geführt, da ich zwei Computer habe. Verschieben funktioniert robust. Die „gelöschten“ Emails liegen dann im Trash und werden dort von Proton nach dreißig Tagen gelöscht.
Sobald mbsync eingerichtet ist, können wir den ersten Sync testen. Dazu in der Shell den Befehl mbsync -a eingeben. Es sollten jetzt bereits die ersten Emails aus der Proton Bridge synchronisiert und im Mail-Verzeichnis gespeichert werden.
Mu einrichten
Wenn mbsync eingerichtet ist, müssen wir mu einmalig initialisieren. Mit diesem Befehl in der Shell führen wir die Initialisierung durch: mu init --maildir=~/Mail --my-address=jan.iversen@proton.me mu index
Automatisierung des Sync und der Indizierung
Damit wir einen Automatismus haben, können wir einfach einen systemd-Timer nutzen.
Falls wir noch kein Verzeichnis für eigene systemd-Dienste haben, legen wir es an: mkdir -p ~/.config/systemd/user/
mbsync.service anlegen
Hier legen wir den eigentlichen Dienst an. Der Dienst wird über einen Timer gestartet. Es wird der Sync durchgeführt. Anschließend indiziert mu die Emails.
Die Datei ~/.config/systemd/user/mbsync.service erstellen
[Unit]
Description=Mail Sync
[Service]
Type=oneshot
ExecStart=/usr/bin/mbsync -a
ExecStartPost=-/usr/bin/mu index
mbsync.timer anlegen
Der Timer sorgt dafür, dass alle fünf Minuten eine Synchronisation stattfindet.
Die Datei ~/.config/systemd/user/mbsync.timer erstellen.
[Unit]
Description=Mail Sync alle 5 Minuten
[Timer]
OnBootSec=2m
OnUnitActiveSec=5m
[Install]
WantedBy=timers.target
Timer aktivieren
Diesen Befehl einmalig ausführen. Systemd aktiviert dann den Timer sofort.
systemctl --user enable --now mbsync.timer
Emails versenden
Wir wollen auch Emails versenden. Dafür verwenden wir msmtp. Das Programm sendet lokal die Mails an die Protonbridge. Und diese erledigt dann den Rest für uns. Hier benötigen wir ebenfalls eine Konfiguration. Die Konfiguration liegt unter ~/.msmtprc
# Standardeinstellungen für alle Konten
defaults
auth on
tls on
tls_starttls on
# Hier nutzen wir wieder dein exportiertes Zertifikat
tls_trust_file ~/Mail/cert.pem
logfile ~/.msmtp.log
# Dein Proton-Konto via Bridge
account protonmail
host 127.0.0.1
port 1025
from "xxx@proton.me"
user "xxx@proton.me"
passwordeval "echo 'yyy'"
# Dieses Konto als Standard setzen
account default : protonmail
Auch msmtp benötigt den Ort des Zertifikats sowie die Zugangsdaten der Proton Mail Bridge.
Konfiguration in Emacs
Ich kopiere hier einfach meine Konfiguration. Das ist teilweise durch KI generiert oder übernommene Parameter aus anderen Blogs. Für mich funktioniert die Konfiguration so sehr gut.
(use-package mu4e
:ensure nil ; Wir nutzen das Systempaket von openSUSE
:config
;; --- GRUNDLAGEN ---
;; Sagt Emacs, wo dein Haupt-Mail-Ordner liegt.
(setq mu4e-maildir "~/Mail")
;; Intervall für Emailcheck
(setq mu4e-update-interval 300)
;; Sent-Mails löschen
(setq mu4e-sent-messages-behavior 'delete)
;; --- DEINE IDENTITÄT ---
(setq user-mail-address "jan.iversen@proton.me"
user-full-name "Jan Iversen")
;; --- ORDNER-STRUKTUR (Proton-Standard) ---
;; Hier definieren wir, welche Ordner für was zuständig sind.
;; Das "mu4e-maildir-shortcuts" erlaubt dir, mit 'j' und
;; dann dem Buchstaben (z.B. 'i') blitzschnell zu springen.
(setq mu4e-maildir-shortcuts
'(("/INBOX" . ?i)
("/Sent" . ?s)
("/Trash" . ?t)
("/Drafts" . ?d)
("/Archive" . ?a)))
;; --- VERSAND (msmtp) ---
;; Hier sagen wir Emacs, dass es msmtp zum Verschicken nutzen soll.
(setq send-mail-function 'sendmail-send-it
sendmail-program "/usr/bin/msmtp"
message-sendmail-f-is-evil t
message-sendmail-extra-arguments '("--read-envelope-from"))
;; --- KOMFORT ---
;; Bilder direkt in der Mail anzeigen (schön auf deinem Ultrawide!)
(setq mu4e-view-show-images t)
;; HTML-Mails schick im Emacs-Puffer anzeigen
(setq mu4e-html2text-command "w3m -T text/html"))
;; Anzahl ungelesene Emails in Modeline anzeigen
(mu4e-modeline-mode 1)
(add-hook 'mu4e-index-updated-hook #'force-mode-line-update)
(setq mu4e-sent-folder "/Sent"
mu4e-drafts-folder "/Drafts"
mu4e-trash-folder "/Trash"
mu4e-refile-folder "/Archive")
;; Proton ist zickig beim Löschen
(setq mu4e-change-filenames-when-moving t)
(setq mu4e-trash-without-flag t)
(setq mu4e-headers-leave-behavior 'apply)
Wichtig sind die letzten drei Parameter für Proton. Ich verstehe nicht genau, was eigentlich im Hintergrund geschieht. Aber wenn alles so konfiguriert ist, funktioniert das „Löschen“, also Verschieben einer Email in Trash, zuverlässig.
Abschluss
Wenn alles eingerichtet ist, Emacs einmal neu starten. Über Alt+x mu4e starten und sich (hoffentlich) freuen, dass Emails im Dashboard angezeigt werden. Ab da verweise ich dann auf die Dokumentation für mu4e für die Bedienung. Am besten den Versand einer Email einmal testen und prüfen, ob alles korrekt ankommt. Bei mir hat es (bis auf das Löschen von Mails) sofort funktioniert. Und teste dann einmal die Suche, wenn alle Emails synchronisiert sind.
Fazit
Für mich funktioniert die Emailverwaltung in Emacs wunderbar. Es ist rasend schnell. HTML-Emails werden auch gut dargestellt und sind sogar entspannter zu lesen. Emacs bereinigt quasi die HTML-Mails und man kann sich auf den Inhalt konzentrieren. Wenn Emacs geschlossen ist, läuft dennoch der Sync und die Indizierung. Dadurch sind lokal alle Daten aktuell. Der einzige „Wermutstropfen“… es kann durch die Intervalle durchaus einige Minuten dauern, bis in Emacs eine Email angezeigt wird. Ich kann damit leben. Falls mal ein 2FA-Code per Email gesendet wird, den ich wirklich sofort benötige, schaue ich entweder auf das Smartphone oder stoße den Sync kurz manuell an. Aber wie oft kommt das wirklich vor. Mich entschleunigt das Lesen der Emails in Emacs sehr. Und ich kann jetzt Emails mit TODOs in orgmode verknüpfen.