ADMIN
2024
11
2024-10-30T12:00:00
Cloudmanagement
PRAXIS
054
Open-Source-Tipp
Mail
Reibungsloser Mailversand mit mbsync und msmtp
In Kontakt bleiben
von Thorsten Scherf
Veröffentlicht in Ausgabe 11/2024 - PRAXIS
Wer gern mit terminalbasierten E-Mail-Clients arbeitet, aber nicht ständig eine Verbindung zu einem Mailserver hat, muss seine Mails in regelmäßigen Abständen auf das lokale System synchronisieren. Parallel müssen ausgehende Nachrichten so lange zwischengespeichert werden, bis wieder eine Verbindung zu einem SMTP-Server besteht. Der Open-Source-Tipp in diesem Monat stellt hierfür die beiden Tools mbsync und msmtp vor.

Mbsync [1] ist ein Kommandozeilen-Tool, das lokale E-Mail-Postfächer mit Remote-Mailboxen synchronisiert. Es unterstützt sowohl IMAP- als auch Maildir-Formate und ist in der Lage, E-Mails bidirektional abzugleichen. Das bedeutet, dass Änderungen in einem lokalen Postfach auf das Remote-Postfach übertragen werden und umgekehrt. Mbsync ist besonders nützlich für Nutzer von E-Mail-Clients wie Mutt oder NeoMutt, die einen unkomplizierten Betrieb sowohl im Online- als auch im Offlinemodus benötigen.
Das Tool msmtp ist, im Gegensatz zu den bekannten Schwergewichten Postfix oder Sendmail ein schlanker und flexibler SMTP-Client, der E-Mails von einem lokalen Rechner über einen externen SMTP-Server versendet. Die Software dient als einfache, aber leistungsstarke Schnittstelle zwischen E-Mail-Clients wie Mutt, NeoMutt oder anderen Mail User Agents (MUA). Da msmtp direkt über die Kommandozeile agiert und leicht konfigurierbar ist, können Sie das Tool flexibel einsetzen und an Ihre eigenen Anforderungen anpassen.
Obwohl msmtp primär für den Onlinebetrieb konzipiert ist, können Sie es auch im Offlinemodus betreiben. Dazu lagern E-Mails lokal in einer Warteschlange zwischen und gehen raus, sobald wieder eine Netzwerkverbindung verfügbar ist. Realisiert wird dieser Ansatz oft durch die Verwendung von msmtpq [3]. Dies ermöglicht eine flexible E-Mail-Verwaltung, selbst wenn der Rechner zeitweise offline ist. Auch wenn wir in diesem Open-Source-Tipp das Skript msmtpq betrachten, finden Sie unter ein alternatives Skript, das Sie ebenfalls für den Offlinebetrieb von msmtp einsetzen können.
Mbsync [1] ist ein Kommandozeilen-Tool, das lokale E-Mail-Postfächer mit Remote-Mailboxen synchronisiert. Es unterstützt sowohl IMAP- als auch Maildir-Formate und ist in der Lage, E-Mails bidirektional abzugleichen. Das bedeutet, dass Änderungen in einem lokalen Postfach auf das Remote-Postfach übertragen werden und umgekehrt. Mbsync ist besonders nützlich für Nutzer von E-Mail-Clients wie Mutt oder NeoMutt, die einen unkomplizierten Betrieb sowohl im Online- als auch im Offlinemodus benötigen.
Das Tool msmtp ist, im Gegensatz zu den bekannten Schwergewichten Postfix oder Sendmail ein schlanker und flexibler SMTP-Client, der E-Mails von einem lokalen Rechner über einen externen SMTP-Server versendet. Die Software dient als einfache, aber leistungsstarke Schnittstelle zwischen E-Mail-Clients wie Mutt, NeoMutt oder anderen Mail User Agents (MUA). Da msmtp direkt über die Kommandozeile agiert und leicht konfigurierbar ist, können Sie das Tool flexibel einsetzen und an Ihre eigenen Anforderungen anpassen.
Obwohl msmtp primär für den Onlinebetrieb konzipiert ist, können Sie es auch im Offlinemodus betreiben. Dazu lagern E-Mails lokal in einer Warteschlange zwischen und gehen raus, sobald wieder eine Netzwerkverbindung verfügbar ist. Realisiert wird dieser Ansatz oft durch die Verwendung von msmtpq [3]. Dies ermöglicht eine flexible E-Mail-Verwaltung, selbst wenn der Rechner zeitweise offline ist. Auch wenn wir in diesem Open-Source-Tipp das Skript msmtpq betrachten, finden Sie unter ein alternatives Skript, das Sie ebenfalls für den Offlinebetrieb von msmtp einsetzen können.
Installation über Repositories
Beide Tools stehen in den allermeisten Linux-Distributionen direkt über die Standard-Software-Repositories zum Download bereit. Das Tool mbsync ist Teil des Pakets isync, das einige weitere Tools enthält. Auf einem Fedora-System installieren Sie die Software beispielsweise einfach mithilfe von dnf:
dnf install isync msmtp
Für macOS-Benutzer stehen mbsync und msmtp über den Homebrew-Paketmanager zur Verfügung:
brew install isync msmtp
Grundlegende Konfiguration
Die Konfiguration von mbsync erfolgt über eine Datei namens ".mbsyncrc" im Home-Verzeichnis des Benutzers. Dieses File definiert die zu synchronisierenden Konten und Postfächer sowie die Synchronisationsparameter. Listing 1 zeigt ein einfaches Beispiel für eine mbsyncrc-Konfigurationsdatei. Darin wird ein IMAP-Konto mit einem lokalen Maildir synchronisiert. Der IMAPAccount-Block definiert die Zugangsdaten für den E-Mail-Server. Der "IMAPStore"-Abschnitt repräsentiert das Remote-Postfach, während der "MaildirStore"-Teil das lokale Verzeichnis für die E-Mails angibt. Schließlich definiert der "Channel"-Block, wie die beiden Postfächer synchronisiert werden sollen.
Listing 1: Konfigurationsdatei .mbsyncrc
### Die Konfigurationsdatei verbindet ein entferntes und lokales E-Mail-Postfach.
IMAPAccount example
Host imap.example.com
User foo@example.com
Pass foo-password
IMAPStore example-remote
Account example
MaildirStore example-local
Path ~/Maildir/
Inbox ~/Maildir/Inbox
Channel example-channel
Master :example-remote:
Slave :example-local:
Patterns *
Create Slave
Sync Pull
Sichere Passwortverwaltung
Natürlich ist das Speichern von Klartext-Passwörtern in der Konfigurationsdatei nicht empfehlenswert. Eine bessere Methode zur Verwaltung von Passwörtern besteht darin, diese in einer externen Datei zu speichern, zu verschlüsseln und mbsync dann anzuweisen, diese Datei zuerst zu entschlüsseln und dann das decodierte Passwort für die Anmeldung am entfernten IMAP-Server zu verwenden.
Möchten Sie mittels mbsync beispielsweise Ihr GMail-IMAP-Postfach abfragen, bietet es sich im ersten Schritt an, ein App-Passwort für den Zugriff auf Ihr Postfach zu erzeugen. Dies ist auch dann notwendig, wenn Sie die Zwei-Faktor-Authentifizierung aktiviert haben. Wie Sie ein solches App-Passwort erzeugen, ist auf einer Hilfeseite von Google dokumentiert. In unserem Beispiel speichern wir das Passwort in der Datei "~/.gmail" und verschlüsseln es dann mit dem Tool gpg. In der Konfiguration von mbsynrc verwenden Sie statt der Instruktion "Pass" dann einfach "PassCmd", um das Tool anzuweisen, die mit GPG verschlüsselte Datei zu decodieren, um an das App-Passwort zu gelangen:
PassCmd "gpg -dq ~/.gmail.gpg"
Synchronisation automatisieren
Um die E-Mails regelmäßig zu synchronisieren, können Sie den Aufruf von mbsync mit einem Cron-Job automatisieren. Hierfür hinterlegen Sie einfach den entsprechenden Aufruf in der Crontab-Datei Ihres Benutzer-Accounts:
crontab -e
*/15 * * * * /usr/bin/mbsync -a
Da Sie in der Konfigurationsdatei durchaus mehrere Mailkonten hinterlegen können, sorgt der Parameter "-a" dafür, dass mbsync alle in der Konfigurationsdatei definierten Channel synchronisiert.
Mails versenden mit msmtpq
Zuerst kopieren Sie die beiden Skripte "msmtpq" und "msmtp-queue" aus dem "doc"-Verzeichnis in einen Ordner, der in der Pfad-Variablen enthalten ist. Vergessen Sie nicht, die beiden Skripte im Anschluss ausführbar zu machen:
/usr/share/doc/msmtp*/scripts/msmtpq/msmtp* /usr/local/bin/
chmod +x /usr/local/bin/msmtp*
Erzeugen Sie nun eine Konfigurationsdatei "~/.msmtprc" für das Tool (Listing 2). Damit Sie das Passwort für den SMTP-Server nicht im Klartext in der Konfigurationsdatei hinterlegen müssen, können Sie, ähnlich wie bei mbsync, über die Anweisung "passwordeval" auf die Datei mit dem verschlüsselten Passwort zurückgreifen. Für msmtpq legen Sie dann ein entsprechendes Queue-Verzeichnis und eine Logdatei an und hinterlegen beides in der Konfigurationsdatei "~/.msmtpqrc":
mkdir ~/.msmtpqueue/mail
touch ~/.msmtpqueue/log
cat < EOF > ~/.msmtpqrc
MSMTPQ_Q=~/.msmtpqueue/mail
MSMTPQ_LOG=~/.msmtpqueue/log
EMAIL_CONN_TEST={P} ### Fast Ping an 8.8.8.8 als Connectivity-Check
EOF
Um nun die korrekte Funktionsweise von msmtp und msmtpq zu testen, können Sie mit dem folgenden Befehl eine Testnachricht versenden:
echo "Testnachricht" | msmtpq foo@example.com
Im Offlinebetrieb wird die Nachricht nun im Verzeichnis "~/.msmtpqueue/mail/" gespeichert. Mit msmtp-queue -d
lassen Sie sich den Inhalt der Queue anzeigen und der Aufruf von msmtp-queue -r
versendet alle Nachrichten, wenn Sie wieder im Onlinebetrieb sind. Den letzten Schritt können Sie auch wieder durch einen Eintrag in Ihrer Crontab-Datei automatisieren. Schließlich legen Sie in der Konfigurationsdatei Ihres MUA fest, welches Programm zum Versenden von E-Mails zum Einsatz kommen soll. Für Mutt- oder NeoMutt-Anwender bedeutet dies, dass der folgende Eintrag in die Konfigurationsdatei "./muttrc" hinzuzufügen ist:
set sendmail="/usr/local/bin/msmtpq"
set sendmail_wait = -1
Der letzte Eintrag sorgt dafür, dass das Mailprogramm nicht blockiert wird, wenn das Versenden der Nachricht im Offlinebetrieb fehlschlägt.
Listing 2: Konfigurationsdatei .msmtprc
### In der Konfigurationsdatei hinterlegen Sie die Zugangsdaten für Ihren SMTP-Server.
GMAIL
auth on
tls on
tls_trust_file /etc/pki/tls/cert.pem
logfile ~/.msmtp.log
account default
host smtp.example.com
port 587
from foo@example.com
user foo@example.com
passwordeval "gpg -dq ~/.gmail.gpg"
account default : GMAIL
Fazit
Benutzer von terminalbasierten E-Mail-Clients arbeiten mit mbsync und msmtp auch im Offlinebetrieb bequem mit ihren digitalen Nachrichten. Für Benutzer von macOS erwartet das msmtpq-Skript allerdings eine aktuelle 5er-Version der Bash-Shell. Von Haus aus liefert macOS die Version 3.x aus, die nicht kompatibel mit msmtpq ist.
(dr)