Oftmals macht es Sinn, wenn man von einem Linux-System direkt eine E-Mail senden kann. Anwendungsbeispiele wären z.B. der Versand einer Mail, wenn ein Cronjob fehlschlägt oder auch eine Benachrichtigung, wenn durch fail2ban eine IP auf Grund zu vieler fehlgeschlagener Anmeldeversuche gebannt wurde.
Nun könnte man einfach einen Mail Transfer Agent, wie z.B. Sendmail oder Postfix auf dem System aufsetzen. Allerdings ist es recht umständlich einen „echten“ Mail-Server zu betreiben, v.a. wenn man nur einfache Mails zur Benachrichtigung versenden will.
Hierzu gibt es dann einfache Programme, die nicht mit einem echten Mailserver zu vergleichen sind, sondern die einfach Mails an einen bereits bestehenden STMP-Server senden können – dazu braucht man einfach nur einen SMTP-Client).
Vor einiger Zeit habe ich in diesem Blog schon mal den SMTP-Client sSMTP vorgestellt. Heute will ich eine Alternative dazu vorstellen: msmtp
Auch wenn der Artikel auf Ubuntu 18.04 basiert, sollte es kein Problem sein, das gezeigte Vorgehen auf anderen Systemen/Distributionen umzusetzen.
Update-Historie (letztes Update 08.07.2022)- 08.07.2022:
- Hinweis bzgl. set_from_header hinzugefügt, falls beim Senden über msmtp ein Fehler „554-Transaction failed“ auftritt.
- 31.08.2019:
- Anpassungen für /etc/mail.rc ist notwendig, damit Mails versendet werden können.
- Hinweise hinzugefügt, wenn Mails auch von anderen Benutzern (ohne Root-Rechte) versendet werden sollen.
- 16.05.2019:
- Reihenfolge der auszuführenden Schritte verändert: Der Alias muss noch vor dem Versenden der Test-Mail gesetzt werden.
Inhalt
sSMTP läuft doch problemlos – was spricht dagegen?
Ich habe mit sSMTP immer gute Erfahrungen gemacht. Jedoch wird dieses Programm nicht mehr weiterentwickelt (Quelle: Arch Wiki). Dadurch kann ich sSMTP nicht mehr ohne Einschränkungen empfehlen. Wenn beispielsweise Bugs oder Sicherheitslücken gefunden werden, ist es fraglich, ob diese noch ausgebaut werden.
Generell sollte man aus diesen Gründen Abstand von Software nehmen, die nicht mehr aktiv weiterentwickelt wird. Trotzdem soll das nun nicht heißen, dass man sSMTP ab sofort nicht mehr verwenden sollte: Wer sSMTP bereits eingerichtet hat und damit keine Probleme hat, muss sich nun nicht sofort nach einer Alternative umsehen – trotzdem sollte man über kurz oder lang über ein „Update“ zu msmtp nachdenken.
Wer aber gerade auf der Suche nach einem leichtgewichtigen SMTP-Client ist, der sollte lieber gleich zu msmtp greifen.
Installation und Konfiguration vom msmtp
Zunächst bringen wir das System wie immer auf den neusten Stand:
apt-get update && apt-get upgrade -V
Anschließend wird msmtp installiert:
apt-get install msmtp msmtp-mta mailutils
Das Paket mailutils wird zwar nicht unbedingt benötigt, jedoch ist dies beim späteren Verwenden von Mails sehr hilfreich,.
Für die Konfiguration des Programms gibt es zwei unterschiedliche Konfigurations-Dateien:
- Eine systemweite Konfiguration
- Eine benutzerspezifische Konfiguration.
Wo diese unterschiedlichen Konfigurations-Dateien gespeichert sind, ermittelt man einfach mit folgendem Befehl:
msmtp --version
Für das weitere Vorgehen nutzen wir hier die systemweite Konfiguration, da E-Mails nur vom System selbst verschickt werden sollen (z.B. bei fehlgeschlagenen Cronjobs).

Beide Dateien sind nach einer neuen Installation nicht vorhanden (so dass man diese einfach nur auf die eigenen Bedürfnisse abändern könnte), allerdings gibt es auf der Website von msmtp eine Beispiel-Konfiguration.
Für die systemweite Konfiguration wird nun folgende Datei bearbeitet:
nano /etc/msmtprc
Hinweis: Mit dieser Konfiguration ist es nur als Root-User möglich, E-Mails zu versenden. Wenn weiteren Benutzern diese Möglichkeit gegeben werden soll, müssen diese Benutzer eine User-spezifische Konfigurations-Datei anlegen:
nano ~/.msmtprc
Inhaltlich sind die Dateien (systemweite und benutzerspezifische Konfiguration) gleich aufgebaut. Der Inhalt kann beispielsweise so aussehen (hier am Beispiel eines fiktiven Mail-Accounts meinedomain.de):
# Set default values for all following accounts. defaults # Use the mail submission port 587 instead of the SMTP port 25. port 587 # Always use TLS. tls on # Set a list of trusted CAs for TLS. The default is to use system settings, but # you can select your own file. tls_trust_file /etc/ssl/certs/ca-certificates.crt # If you select your own file, you should also use the tls_crl_file command to # check for revoked certificates, but unfortunately getting revocation lists and # keeping them up to date is not straightforward. #tls_crl_file ~/.tls-crls # Mail account # TODO: Use your own mail address account bob@meindedomain.de # Host name of the SMTP server # TODO: Use the host of your own mail account host smtp.meindedomain.de # This is especially important for mail providers like # Ionos, 1&1, GMX and web.de set_from_header on # As an alternative to tls_trust_file/tls_crl_file, you can use tls_fingerprint # to pin a single certificate. You have to update the fingerprint when the # server certificate changes, but an attacker cannot trick you into accepting # a fraudulent certificate. Get the fingerprint with # $ msmtp --serverinfo --tls --tls-certcheck=off --host=smtp.freemail.example #tls_fingerprint 00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33 # Envelope-from address # TODO: Use your own mail address from bob@meindedomain.de # Authentication. The password is given using one of five methods, see below. auth on # TODO: Use your own user name fpr the mail account user bob@meindedomain.de # Password method 1: Add the password to the system keyring, and let msmtp get # it automatically. To set the keyring password using Gnome's libsecret: # $ secret-tool store --label=msmtp \ # host smtp.freemail.example \ # service smtp \ # user joe.smith # Password method 2: Store the password in an encrypted file, and tell msmtp # which command to use to decrypt it. This is usually used with GnuPG, as in # this example. Usually gpg-agent will ask once for the decryption password. #passwordeval gpg2 --no-tty -q -d ~/.msmtp-password.gpg # Password method 3: Store the password directly in this file. Usually it is not # a good idea to store passwords in plain text files. If you do it anyway, at # least make sure that this file can only be read by yourself. # TODO: Use the password of your own mail account password pAssW0Rd123 # Password method 4: Store the password in ~/.netrc. This method is probably not # relevant anymore. # Password method 5: Do not specify a password. Msmtp will then prompt you for # it. This means you need to be able to type into a terminal when msmtp runs. # Set a default account # TODO: Use your own mail address account default: bob@meindedomain.de # Map local users to mail addresses (for crontab) aliases /etc/aliases
Alle Einstellungen, die man individuell anpassen muss, sind hier mit „# TODO“ gekennzeichnet. Bitte auch die Kommentare in der Datei beachten.
Hinweis: Der Eintrag set_from_header on ist besonders bei Mail-Providern wie Ionos, 1&1, GMX und web.de notwendig. Wird dieser vergessen, bekommt man beim Senden über msmtp einen Fehler („554-Transaction failed“).
Noch ein Hinweis auf die Authentifizierungs-Methode: In diesem Beispiel nutzen wird die einfachste Form der Authentifizierung, indem das Passwort des Mail-Accounts direkt in der Konfiguration gespeichert wird. msmtp unterstützt hier allerdings auch weitere Authentifizierungs-Methoden. Mehr Informationen dazu findet man in der Dokumentation zu msmtp.
Als nächstes sorgen wir dafür, dass nicht jeder Zugriff auf die Datei hat (besonders wichtig, wenn das Passwort direkt in der Konfiguration gespeichert ist):
chmod 600 /etc/msmtprc
Auch bei einer benutzerspezifischen Konfiguration müssen die Rechte angepasst werden:
chmod 600 ~/.msmtprc
Zum Schluss wird noch ein Alias angelegt, so dass die Empfänger-Adresse des Root-Accounts (oder des Accounts, mit dem später E-Mail versendet werden sollen) bekannt ist. Dies wird in der Datei angegeben, die auch schon ganz am Ende der Konfiguration von msmtp aufgeführt wurde:
nano /etc/aliases
Hier wird nun die Empfänger-Adresse des Root-Accounts angegeben. An diese Adresse werden nun E-Mails verschickt, wenn z.B. ein Cronjob fehlschlagen sollte. Daneben wird noch eine allgemeine „Fallback-Empfänger-Adresse“ angegeben, falls System-Meldungen nicht im Kontext des Root-Accounts auftreten:
root: admin@meinedomain.de default: admin@meinedomain.de
Bevor nun eine erste Test-Mail versendet werden kann, muss noch das Mail-Programm definiert werden:
nano /etc/mail.rc
Der Inhalt sieht dabei folgendermaßen aus:
set sendmail="/usr/bin/msmtp -t"
Nach der erfolgten Konfiguration vom msmtp können E-Mails nun ganz einfach über die Kommandozeile verschickt werden:
echo "Inhalt der E-Mail" | mail -s "Betreff" test@mail.de
Am besten gleich mal ausprobieren, indem ihr euch selbst eine Test-E-Mail schickt.
Fazit
Mit msmtp ist es einfach möglich, von einem Linux-System E-Mails zu versenden, ohne einen „schwergewichtigen“ Mail-Server aufsetzen zu müssen. Es wird einfach ein vorhandener Mail-Account (z.B. eines Freemailers) benutzt und die Konfiguration gestaltet sich auch sehr einfach.
Neben dem Mail-Versand von der Kommandozeile erhält man nun auch ganz komfortabel Benachrichtigungen per E-Mail, wenn beispielsweise ein Cronjob ausgeführt wurde, oder auch eine IP-Adresse von Fail2ban gebannt wurde.
Weiterführende Artikel
- Nextcloud auf Ubuntu Server 18.04 LTS mit nginx, MariaDB, PHP, Let’s Encrypt, Redis und Fail2ban
- Ubuntu Server 18.04 LTS als Hyper-V Gastsystem installieren und optimal einrichten
- Linux: Einfach E-Mails senden mit sSMTP
Hi,
wie kann man eine Zweite Absender email anlegen?
Also ich habe 2 bash Scripte und im zweiten Skript möchte ich eine andere Absenderemailasdresse haben.
Hi,
ich denke, dies musst du mit verschiedenen Dateien ~/.msmtprc machen. Pro User eine andere, das Skript muss dann aber auch unter dem entsprechenden User ausgeführt werden.
Gruß,
Jan
Hallo und lieben Dank für den Artikel.
Ich möchte msmtp in Verbindung mit Friendica nutzen und bin nach dieser Anleitung vorgegangen.
Wenn ich von der Console aus manuell eine Mail verschicke funktioniert es.
Allerdings funktioniert es nicht in Verbindung mit Friendica. Ich vermute, dass es mit dem Apache „Nutzer“ www-data zusammenhängt?
Hast Du einen Tipp, wie ich an an diese Problem gehen könnte um es zu lösen?
Hi,
Frendica läuft dann unter dem User www-data? Hier müsstest du dann denke ich mal für diesen User auch die msmtp-Konfiguration vornehmen. Testen kannst du das Versenden der Mail über die Kommandozeile, indem du vorher mit
su - www-data
auf den Webserver-User wechselst.Gruß,
Jan
Hallo,
danke für die Anleitung.
Ich versuche das gerade auf meinem Ubuntu 20.04 Server für Nextcloud umzusetzen.
Leider bekomme ich nach dem Absetzen der Testmail folgende Fehlermeldung:
/usr/bin/msmtp: symbol lookup error: /usr/bin/msmtp: undefined symbol: type_b_loc, version GLIBC_2.3
mail: Sending data to /usr/bin/msmtp -t failed: Cannot execute
mail: cannot send message: Cannot execute
Hab ich irgendwo einen Schreibfehler drinnen? Finde leider nichts.
Hast du eine Idee?
Gruß Helix
Hallo Helix,
das sieht mir eher aus wie ein Programmfehler (also kein Konfigurationsfehler). Hier würde ich mal den Entwickler kontaktieren.
Gruß,
Jan
Hallo,
danke für die Anleitung. Ich musste allerdings noch den Parameter „tls_starttls off“ setzen, damit es mit meinem Provider funktioniert.
Ich habe allerdings noch nicht herausgefunden, wie man in der Standardkonfiguration einen „Absenderalias“ setzt.
Beim Aufruf von sendmail kann man den ja mitgeben.
sendmail -f „Blafasel “
Vielleicht hat dazu ja jemand einen Tip.
VG
Henning
Hi Henning,
ist
-f
bei Sendmail nicht die envelope from address? Hier gibt es eine Variablefrom
in der msmtp-Config, welche lt. Doku wohl das gleiche macht.Wirkt das bei dir nicht?
Gruß,
Jan
Hi Jan,
könntest du evtl noch zeigen, wie man den Inhalt der Email mit PGP (bzw GPG) absichert? Also die Email mit einem Public Key (signiert und) verschlüsselt?
Vorab vielen Dank
MfG
Marcel
Hi Jan,
ich hab’s schon.
Es muss gpg installiert und der Public Key des Empfängers importiert sein:
#!/bin/sh
header=$(cat <<-END
To: mail@mail.com
From: "Server"
Subject: SERVER INFO
MIME-Version: 1.0
Content-Type: text/plain
END
)
cipher=$(echo „PLAINTEXT“ | gpg –encrypt -r mail@mail.com –armor)
email=“$header$cipher“
echo „$email“ | /usr/bin/msmtp mail@mail.com
#–EOF—
Das war’s…
Vllt nimmst du es noch mit auf?
Viele Grüße
Marcel
Hi Marcel,
OK, du hast es ja schon selbst rausgefunden.
Danke für deine Erklärungen, ist vielleicht auch für andere ganz interessant.
Gruß,
Jan
Hallo Jan,
wo werden dann eigentlich die Log´s (Versand) von msmtp gespeichert?
Vielen Dank
Gruß Hans
Hi Hans,
das Logfile kannst du in der .msmtprc angeben.
Gruß,
Jan
Hallo Jan,
vielen Dank, dann passt scheinbar an meiner Konfig was nicht.
groups msmtp
sudo touch /var/log/msmtp
sudo chown msmtp:msmtp /var/log/msmtp
sudo chmod 660 /var/log/msmtp
logfile var/log/msmtp
Gruß Hans
Danke! Du beantwortest ja Jahre nach dem Tutorial noch Fragen. :) Ich habe die Anleitung befolgt (globale Konfiguration) und erhalte dennoch nur „Mail: Mailer kann nicht erstellt werden: In der URL fehlen benötigte Teile
mail: Nachricht kann nicht gesendet werden: In der URL fehlen benötigte Teile“. Den „-t“ Parameter habe ich schon mehrfach ohne Erfolg versucht zu ändern. „less secure apps“ ist bei gmail aktiviert. Eine msmtp.log existiert auch nicht. Ich stehe vielleicht auf dem Schlauch. Wenn du noch einen Tipp hast, wäre ich natürlich dankbar.
Hi Felix,
kannst du aus der Meldung erkennen, was genau er mit „URL“ meint?
Gruß,
Jan
Nein, leider nicht, dieser Zweizeiler ist alles, was er gibt. Ein „–verbose“ kennt mail auch nicht. sudo macht keinen Unterschied. Die Google Suche hierzu war auch erfolglos, auch auf englisch. Ich werde nochmal alles durchgehen, Schritt für Schritt. Habe den Pi jetzt seit mehreren Wochen und komme trotz vieler Misserfolge immer wieder zu diesem Ziel zurück. Wenn du einen Link o.ä. zu opensmtp empfehlen kannst, probiere ich das auch gerne mal aus. Im Gegensatz zu ssmtp scheint das ja noch aktiv gepflegt zu werden.
VG
Felix
Hi Felix,
um hier mal Google als Schuldigen auszuschließen: Probiert doch mal einen anderen Mail-Provider. Nicht, dass du dir da nun den Wolf suchst und letzten Endes liegt es an Gmail…
Gruß,
Jan
das stimmt, ich versuche mal gmx und web.
Danke!
Ich ergänze der Vollständigkeit halber: Google war nicht das Problem. GMX und Co. wollen sehr viele Informationen von mir, die ich nicht geben möchte. Ich habe letztlich auf medium.com eine Anleitung („setting up gmail on a raspberry pi“) für postfix gefunden, dessen Einrichtung super einfach war. Jetzt erhalte ich Mails bei Anmeldungen und Ereignissen, die ich selbst noch weiter definieren könnte. Danke dennoch für deine Hilfe!
Hi,
ok, dann funktioniert es ja nun bei dir. Danke für die Rückmeldung!
Gruß,
Jan
Hey ich habe da ein Fehler ich kann da aber nix falsches erkennen
mail: /usr/bin/msmtp -t: No such file or directory
Can’t send mail: sendmail process failed with error code 1
Hi,
existiert bei dir die Datei „/usr/bin/msmtp“? Was sagt „which msmtp“ bei dir?
Gruß,
Jan
Habe eben erst zufällig diese gute Seite gefunden, deshalb jetzt erst (im April 2022): Schau dir mal apparmor (in /etc) an. Dort wirst du fündig.
Die Zeile in der Datei /etc/mail.rc darf keine Anführungszeichen enthalten, muss also wie folgt lauten:
set sendmail=/usr/bin/msmtp -t
Hi Tobi,
das kann ich so nicht 100% bestätigen. Bei mir (mittlerweile Ubuntu 22.04) funktioniert das auch mit den Anführungsstrichen.
Auf welcher Distribution bist du unterwegs?
Gruß,
Jan
Unter Debian 11 und 12 funktioniert es auch bei mir nur ohne die Anführungszeichen.
Hallo,
ich habe deine Anleitung befolgt und es funktioniert auch alles super.
Jetzt habe ich eine kleine Website, bei welcher über php die Mail versendet wird. Das funktioniert allerdings nur wenn ich mittels chown die Datei /etc/msmtprc für www-data frei gebe. Nun kann allerdings root keine Mails mehr verschicken. Kann ich direkt für www-data auch eine konfiguration anlegen, und wenn ja, wie?
Vielen Dank,
Johannes
Hi Johannes,
das sollte möglich sein, wenn du eine Datei .msmtp.rc im Home-Verzeichnis des Usersd www-data anlegst. Auch die „aliases“ nicht vergessen.
Wäre es aber nicht einfacher, die Mail-Funktion von PHP selbst zu nutzen und nicht dem „Umweg“ über msmtp?
Gruß,
Jan
Hi Jan,
wie komme ich in das Home-Verzeichnis von www-data? Es existiert weder unter /home, noch kann ich mittels „su – www-data“ zu diesem Benutzer wechseln…
Gruß,
Johannes
Hi,
ach ja, der User www-data hat ja im Normalfall gar kein Home-Verzeichnis, da es ja kein „echter“ User ist.
Schau mal hier vorbei, da sind ein paar Tipps zu genau deinem Problem aufgelistet.
Evtl. kannst du dir die Sache aber auch einfach er machen, wenn du einfach per setfacl den www-data-User auf die Datei (/etc/msmtprc) berechtigst.
Gruß,
Jan
Super, die Variante mit setfacl hat geholfen. chown auf www-data zu setzen funktioniert zwar auch, dann kann root aber keine Mails mehr senden.
Vielen Dank!
Hi, Ich dachte ja das macht die fertige Kontaktseite von flatpress, aber scheinbar doch nicht.
Hi Jan, relativ weird aber naja: ich habe mal auch noch für den ubuntu user die config erstellt (also im home ordner /.msmtprc) und wenn hab sonst alles brav nach anleitung gemacht. über echo „Test“ | sudo mail -s „Test“ empfänger@mail.de geht auch alles aber wenn ich stattdessen einfach mail -s „Test“ empfänger@mail.de nehme, gibt er mir das hier:
msmtp: /home/ubuntu/.msmtprc: line 1: unknown command Set
mail: Sending data to /usr/bin/msmtp -t failed: Process exited with a non-zero status
mail: cannot send message: Process exited with a non-zero status
Gibt es noch ein Teil den ich für den nicht Root User Konfigurieren muss oder was kann ich sonst noch falsch gemacht haben :)
Hi,
msmtp: /home/ubuntu/.msmtprc: line 1: unknown command Set
: das sieht mir so aus, als würde hier „set“ als Befehl in der entsprechenden Datei drin stehen (also nicht auskommentiert). Kann das vielleicht der Grund sein?Gruß,
Jan
Du bist ein EhrenJAN, Danke :D jetzt klappts…Kannst du evtl noch nen kleinen RUn down geben wie ich mit pgp diese Mails verschicke ? habe schon ein keypair generiert und nutze das auch schon, allerdings weiß ich nicht wie ich das einbinde bei msmtp
Bin da aus dem anderen Post nicht so ganz schlau geworden muss ich sagen :D Danke aber schon mal
LG
Hi Paul,
schau dir zum Thema mamtp + PGP mal diesen Link hier an.
Versucht habe ich das aber auch noch nicht. V.a. die Schlüsselverwaltung auf dem Server dürfte einigermaßen aufwändig sein.
Gruß,
Jan
Danke für dieses, wieder einmal so umfassende How-To, dass alle ‚gotchas‘ mit abdeckt.
Wenn mensch die config am Laufen hat ist die Installation von mpack (https://linux.die.net/man/1/mpack) mittels `apt install mpack`ein nettes Goodie.
Damit lassen sich dann mit `mpack -s „Subject“ /path/to/file recipient@address.tld`super simpel MIME-Attachments verschicken – praktisch z. B. um ein Scan2Mail einzurichten. :)
Danke!
Die BESTE und EINFACHSTE Anleitung die es im www zu finden gibt. :-)
TOP!
Hallo Jan,
leider kann ich keine Mails verschicken.
Wenn ich die Testzeile von dir abschicke (mit richtigem Empfänger) bekomme ich folgende Meldung:
„msmtp: Keine Empfänger gefunden“
…
Ich habe eine Konfiguration in /etc/msmtprc und auch die gleiche nochmal in /root/.msmtprc,
Eine /etc/aliases mit dem Empfänger für root ist ebenfalls vorhanden
Weder mit einem „richtigen“ Empfänger als auch mit „rot“ (der in der /etc/aliases auf den richtigen Empfänger gemapped ist) funktioniert es.
Was könnte das Problem sein?
Mit strace sehe ich nicht, dass eine msmtprc/.msmtprc geöffnet würde.
Kann man den debug Parameter für msmtp in /etc/mail.rc setzen?
Hi Paul,
die Meldung sagt ja leider erst einmal wenig aus.
Kannst du mal in der msmtp-Konfiguration ein Logfile angeben (z.B.
logfile ~/.msmtp.log
). Vielleicht steht hier eine sinnvollere Fehlermeldung drin.Gruß,
Jan
Vielen Dank für die schnelle Antwort.
in msmtprc steht bereits ein Logfile drin. Es wird aber kein Logfile angelegt.
ich habe den Eindruck, dass /etc/msmtprc und auch ~/.msmtprc gar gar nicht gelesen wird. Zumindest taucht dieser Name im strace-Protokoll gar nicht auf. Ich mache alles als root.
Hi,
schau mal, ob es die Log-Datei bereits gibt. Wenn nicht, dann einmal anlegen und dafür sorgen, dass die Gruppe ‚msmtp‘ Schreibrechte auf diese Datei hat. Mir ist es nämlich schon mal unter gekommen, dass nichts geloggt wurde, weil der Prozess die Datei einfach nicht beschreiben konnte.
Gruß,
Jan
Hallo und Danke für die Anleitung.
Das versenden von Mails funktioniert, aber beim Empfang bekomme ich immer die Meldung „keine Nachrichten für root“.
Kannst du mir erklären, was hier noch gemacht werden muss? Ich möchte die Inbox über den Betreff oder den Anhang überwachen, damit ich das angehängte CSV File ablegen kann.
Ist das möglich?
Hi,
wo werden die Mails denn empfangen und wo/wie wird diese Meldung dann angezeigt?
Bisher konnte ich eine solche Meldung noch nicht beobachten.
Gruß,
Jan
Hallo Jan,
vielen Dank für die Anleitung. Es hat bei mir alles gut mit einer Gmail Adresse funktioniert. Leider hat Google die Sicherheitseinstellungen veränndert, so dass ein Zugriff mittels msmtp nicht mehr möglich ist.
So habe ich auf eine GMX Adresse umgeschwenkt. Es funktioniert auch alles gut, wenn ich eine Testmail, auch als root, mittels
echo „Inhalt der E-Mail“ | mail -s „Betreff“ test@mail.de
losschicke.
Wenn allerdings eine Mail aus einem Cron Job geschickt werden soll funktioniert es nicht.
Über tail -f /var/log/syslog bekomme ich die Info.
Jun 15 14:50:01 T430-linux CRON[3955]: (root) CMD (echo „A message from Cron“)
Jun 15 14:50:02 T430-linux cron[3956]: sendmail: der Server hat die Mail nicht akzeptiert
Jun 15 14:50:02 T430-linux cron[3956]: sendmail: Nachricht des Servers: 554-Transaction failed
Jun 15 14:50:02 T430-linux cron[3956]: sendmail: Nachricht des Servers: 554-Reject due to policy restrictions.
Jun 15 14:50:02 T430-linux cron[3956]: sendmail: Nachricht des Servers: 554 For explanation visit https://postmaster.gmx.net/en/error-messages?ip=77.0.105.49&c=hi
Jun 15 14:50:02 T430-linux cron[3956]: sendmail: Mail konnte nicht verschickt werden (Konto default aus /etc/msmtprc)
Jun 15 14:50:02 T430-linux CRON[3954]: (root) MAIL (mailed 20 bytes of output but got status 0x0045 from MTA#012)
Ein msmtp Log habe ich nicht gefunden. Es scheint auch laut Internet schwierig es zu erstellen bzw. die Berechtigungen richtig zu bekommen.
Auch Mails aus „unattended-upgrades“ werden nicht mehr verschickt.
Scheinbar gibt es ein Problem mit Systemmails, die nicht verschickt werden.
Hast Du ene Idee?
Hi Hans,
ja, bei Gmail muss man wohl diese Option „unsichere Clients zulassen“ setzen (oder wie das auch immer heißt – ich nutze selbst kein Gmail).
Aus der Fehlermeldung kann ich allerdings nichts weitere ablesen, außer, dass gegen irgendeine Policy verstoßen wird. Hast du dir mal den gmx-Link angesehen? Das sind zwar auch sehr wenig konkrete Infos zu finden, aber evtl. ein paar Hinweise. Das kann dann aber alles sein, wie falsches Format der Mail oder die Einstufung als Spam.
An deiner Stelle würde ich nochmal alles kontrollieren, was irgendwie mit dem Mail-Versand zu tun hat.
Um welchen Cronjob handelt es sich hier konkret?
Gruß,
Jan
Hallo Jan,
ja die GMX Seite habe ich mir auch angesehen, habe aber auch nichts gesehen.
Was mich wundert ist, dass der normale Versand (zum Test) funktioniert, aber wenn cron eine Mail losschicken möchte, es nicht geht.
Der cron Job führt einen rsync durch, um ein Back-Up zu machen. Es wird kein Script ausgeführt, sonder ein einfach rsync Befehl abgesetzt.
Moin Hans und Jan,
els erstes: gmail erlaubt keine mails über msmtp mehr. Sogenante unsichere mailer werden gar nicht mehr zugelassen. Soltest du vielleicht mal in der Beschreibugn erwähnen, weil die Severantworten nicht immer selbsterklärend sind.
Bei msmtp ist standardmäßig kein Log eingeschaltet. Muß man extra in msmtprc einschalten.
logfile ~/.msmtp.log
Bei web.de bekomme ich auch diesen 554 Fehler. Scheint irgendwie mit den Absende- und Benutzernamen zusammen zu hängen. Wenn die beiden irgendwie unterschiedlich sind (oder so)
Das schöne ist, ich habe das mailprogramm jetzt bei zwei Rechnern eingerichtet, bin der Meinung bei beiden genau die gleiche Konfiguration genommen zu haben, aber bei einem geht es, beim anderen kommt der 554 Fehler.
Da suche ich also noch herum.
Grüße und ein schönes Wochenende noch
Norbert
Hi Norbert,
du hast das ganze in zwei Mail-Programmen eingerichtet (ich denke mal Thunderbird oder so). Dann ist das aber sehr komisch, dass es einmal geht und einmal nicht.
Ich habe hier noch den Hinweis gefunden, dass web.de nur noch TLSv1.2 und TLSv1.3 unterstützt (also kein TLSv1.1 mehr). Wird den Fehler jetzt nicht ad hoc erklären, ist aber evtl. ein Hinweis.
Was aber auffällt: Es haben z.Zt. viele Leute Probleme mit GMX, web.de und 1&1. All diese Anbieter gehören ja zur United Internet AG, d.h. sämtliche Mail-Konfigurationen sollten mehr oder weniger identisch sein (nur z.B. mit anderer Web-Oberfläche). Kann es sein, dass hier zentral beim Hersteller etwas umgestellt/verändert wurde?
Ich nutze all diese Dienste nicht, aber es wäre vielleicht hilfreich, wenn man sich hier mal an den Support werden würde. Bei einem Free-Mailer wird man hier vermutlich null Support bekommen, aber einen Versuch wäre es ja mal wert.
Gruß,
Jan
Hi Hans,
das einzige, was mir dazu noch einfällt: Wenn Mails über Cron versendet werden, wird immer die Mail-Adresse des Users genutzt, der den Cronjob angelegt hat. Wenn hier z.B. keine echte Mail-Adresse definiert ist, kann dies nicht funktionieren.
In einem solchen Fall kann man aber explizit im Crontab eine Mail-Adresse hinterlegen (siehe hier). Das könntest du evtl. noch ausprobieren.
Gruß,
Jan
Moin Jan,
habe zwei mal das msmtp Programm auf raspberrys eingerichet:
bei raspberry 3 mit stretch OS
echo subject: Trollolo | msmtp xxx@web.de -> funktionert
bei raspberry 2 mit jessie OS
echo subject: Trollolo | msmtp xxx@web.de -> funktionert NICHT
(Gleiche msmtprc Konfigurationsdatei)
Das Problem dürfte wohl daran liegen, daß jessie nicht TLS 1.2 unterstützt!
Noch ein Problem:
bei raspberry 3 mit stretch OS
echo subject: Trollolo | mail -a Text xxx@de -> funktioniert NICHT
Der Befehl mail ist für das System unbekannt?!
mail.rc ist korrekt konfiguriert.
set sendmail=“/usr/bin/msmtp -t“
Dann werde ich mal schauen, ob ich dem pi2 TLS 1.2 beibrigen kann.
Grüße
Norbert
hmmm …. laut
openssl s_client -connect dns.google:853 -tls1_2
ist tls1.2 wohl doch schon auf dem pi2 implementiert.
Muß also doch eine anderen Grund für das Problem geben??
Grüße
Norbert
Hi Norbert,
das kann dann auch irgendeine andere Abhängigkeit sein. Aus den Logs bekommt man aber nicht die eigentliche Ursache raus. Was da genau schief läuft, kann dir wohl nur der Anbieter des Mail-Servers sagen.
Allerdings sind Jessie und Strech schon recht alt. Jessie wird gar nicht mehr supported und Strech fällt bald aus dem Support raus (06.07.). Bevor man hier also lange auf Fehlersuche geht, lohnt sich vielleicht eher ein Update.
Gruß,
Jan
Hallo Jan,
ich habe die gleiche Symptomatik inkl. gleicher Fehlermeldung bei meinem Server. Ich nutze ein Postfach bei IONOS bzw. 1&1. Ich hab den Fehler mal beim Support gemeldet. Und von denen kam folgender Hinweis:
###############################################
554 Transaktion fehlgeschlagen, aufgrund von Richtlinieneinschränkungen ablehnen
Problem :
Die E-Mail wurde vom IONOS SMTP-Server abgewiesen, weil die in RFC 5321 und RFC 5322 definierten Standards nicht eingehalten wurden.
Lösung:
Der E-Mail-Client muss die folgenden Kriterien erfüllen:
Die Kopfzeilen der E-Mail müssen gemäß RFC 2822 genau eine gültige „Date“-Zeile enthalten .
Folgende Kopfzeilen dürfen nur einmal vorhanden sein: Von , Absender , An , CC , Betreff
Die genannten Kopfzeilen müssen syntaktisch korrekt sein
Hinweis: Die Zeilen „ An“ und „CC “ können mehrere Empfänger enthalten.
Gemäß den Empfehlungen von RFC7103 werden fehlerhafte Nachrichten von IONOS nicht automatisch korrigiert, da sonst DKIM-Signaturen ungültig werden.
###############################################
Nun stelle ich mir natürlich die Frage, an welchen Stellen hier die Konfiguration von msmtp Möglichkeiten bietet, die Richtlinien einzuhalten.
Gruß, Stefan
Hi Stefan,
ich habe z.B. hier etwas gefunden, was in die gleiche Richtung geht, wenn auch nicht msmtp-spezifisch. Dennoch scheint das Netz von Problemen mit Ionos/web.de/etc. voll zu sein.
Kann es sein, dass er mehrere Mail senden will, die mit Semikolon getrennt sind, o.ä.?
Evtl. wäre es hilfreich, wenn man hier mal einen Issue bei GitHub eröffnet?
Gruß,
Jan
Email-Versand funktioniert wieder
Nach Durchsicht der möglichen Parameter für die msmtprc habe ich drei mögliche Einträge identifiziert, die ich der Datei hinzugefügt habe. Zwei davon erstmal auskommentiert, um mich heranzutasten. Gleich der erste Versuch war ein Volltreffer. Heute Morgen hatte ich endlich wieder eine Mail von meinem Backupserver im Postfach. Hier ein Auszug aus meiner msmtprc:
port 587
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
set_from_header on
Neu ist hier der unterste Eintrag. Der sorgt dafür, dass der Accountname mitübergeben wird. Das muss bei Ionos/1&1 zwingend erfolgen, sonst wird der Versand vom smtp-Server abgelehnt. Fehlt der Eintrag, steht er standardmäßig auf auto, was offensichtlich nicht ausreicht.
Ich hoffe, dieser Hinweis klappt bei allen Betroffenen ebenso.
Gruß, Stefan
Hi Stefan,
super, danke für den Hinweis!
Da hier ja schon mehrere Leute mit anderen Anbietern ähnliche Probleme hatten: Wäre super, wenn ihr das auch mal ausprobieren könntet.
Ich habe den Artikel auf jeden Fall schon mal aktualisiert, denn diese Einstellung sollte auf keinen Fall schaden.
Gruß,
Jan
Hallo Jan,
vielen Dank für den guten Artikel.
Da in den letzten Kommentaren viel diskutiert, meine Erfahrung zur Konfig-Zeile
set_from_header on
In Ubuntu 20.04 bekomme ich mit msmtp Version 1.8.6 den Fehler
.msmtprc: Unbekannter Befehl set_from_header
Kommentiere ich die Zeile „set_from_header on“ aus, behalte aber „from user@domain.com“ kann ich die Mail erfolgreich senden. Mein „Provider“ ist eine deutsche Universität.
Möge dies ein hilfreicher Hinweis sein.
Grüße von Tom
Hallo Tom,
danke für den Hinweis, vielleicht auch für andere ganz interessant.
Gruß,
Jan
Vielen Dank für dieses klasse Tutorial. Bei mir funktioniert alles auf Anhieb. Besten Dank dafür.
Hallo ich habe, so wie beschrieben alles abgearbeitet aber…leider
pi@evb-serverpi:~ $ sudo chmod 600 /etc/msmtprc
pi@evb-serverpi:~ $ sudo chmod 600 ~/.msmtprc
chmod: Zugriff auf ‚/home/pi/.msmtprc‘ nicht möglich: Datei oder Verzeichnis nicht gefunden
und wenn ich dann eine mail schicken möchte.
pi@evb-serverpi:~ $ echo „Inhalt der E-Mail“ | mail -s „Betreff“ meineemail@gmail.com
msmtp: Konto default nicht gefunden: Keine Konfigurationsdatei verfügbar
mail: Senden der Daten an /usr/bin/msmtp -t fehlgeschlagen: Prozess wurde mit einem von Null verschiedenen Status beendet
mail: Nachricht kann nicht gesendet werden: Prozess wurde mit einem von Null verschiedenen Status beendet
was kann ich nun machen.
danke
Hi Lars,
die Logdatei von msmtp befindet sich meistens hier: /var/log/msmtp
Steht hier vielleicht etwas drin, was uns hier weiter bringen würde?
Gruß,
Jan
Hallo!
Ich hatte das gleiche Problem.
Hier hab ich die Lösung gefunden:
https://askubuntu.com/questions/1289573/msmtp-sendmail-account-default-not-found-no-configuration-file-available-sys
Ich hoffe, das hilft Euch auch :-)
Gruß,
Rolf
Hallo Jan,
vielen Dank für die klasse Anleitung. Dies hat auf Anhieb für meinen Docker php Image funktioniert.
Karl …
Gerne trage ich auch etwas zu diesem hervorragenden (!!! thx) Tutotrial bei (es funzte auf Anhieb):
Ubuntu 22.04 desktop mit LAMPS server-Installation
msmtprc root/root 600
aliases root/root 644
mail.rc root/root 644
Fuer gmx(.at)
# Set default values for all following accounts.
defaults
# Use the mail submission port 587 instead of the SMTP port 25.
port 587
# Always use TLS.
tls on
#tls_starttls on
# Set a list of trusted CAs for TLS. The default is to use system settings, but
# you can select your own file.
tls_trust_file /etc/ssl/certs/ca-certificates.crt
# If you select your own file, you should also use the tls_crl_file command to
# check for revoked certificates, but unfortunately getting revocation lists and
# keeping them up to date is not straightforward.
#tls_crl_file ~/.tls-crls
# Mail account
# TODO: Use your own mail address
account xxx@gmx.at
# Host name of the SMTP server
# TODO: Use the host of your own mail account
host mail.gmx.net
# This is especially important for mail providers like
# Ionos, 1&1, GMX and web.de
set_from_header on
# As an alternative to tls_trust_file/tls_crl_file, you can use tls_fingerprint
# to pin a single certificate. You have to update the fingerprint when the
# server certificate changes, but an attacker cannot trick you into accepting
# a fraudulent certificate. Get the fingerprint with
# $ msmtp –serverinfo –tls –tls-certcheck=off –host=smtp.freemail.example
#tls_fingerprint 00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33
# Envelope-from address
# TODO: Use your own mail address
from xxx@gmx.at
# Authentication. The password is given using one of five methods, see below.
auth on
# TODO: Use your own user name fpr the mail account
user xxx@gmx.at
# Password method 1: Add the password to the system keyring, and let msmtp get
# it automatically. To set the keyring password using Gnome’s libsecret:
# $ secret-tool store –label=msmtp \
# host smtp.freemail.example \
# service smtp \
# user joe.smith
# Password method 2: Store the password in an encrypted file, and tell msmtp
# which command to use to decrypt it. This is usually used with GnuPG, as in
# this example. Usually gpg-agent will ask once for the decryption password.
#passwordeval gpg2 –no-tty -q -d ~/.msmtp-password.gpg
# Password method 3: Store the password directly in this file. Usually it is not
# a good idea to store passwords in plain text files. If you do it anyway, at
# least make sure that this file can only be read by yourself.
# TODO: Use the password of your own mail account
password hier_pwd_angeben
# Password method 4: Store the password in ~/.netrc. This method is probably not
# relevant anymore.
# Password method 5: Do not specify a password. Msmtp will then prompt you for
# it. This means you need to be able to type into a terminal when msmtp runs.
# Set a default account
# TODO: Use your own mail address
account default: xxx@gmx.at
# Map local users to mail addresses (for crontab)
aliases /etc/aliases
# log – file
logfile ~/.msmtp.log
Hi,
danke für den Hinweis! Sollte ja nicht mit bei gmx.at, sondern auch bei z.B. gmx.de funktionieren.
Gruß,
Jan
Vielleicht sollte man noch in der Anleitung erwähnen, dass die POP3/IMAP Einstellungen vom Mailprovider freigegeben werden müssen
Hi Hans,
was meinst du hier mit „freigeben“? Der Postausgangsserver muss eben IMAP oder POP3 unterstützen, aber explizit freigegeben werden muss das beim Mail-Provider doch eigentlich nie, oder meinst du hier etwas anderes?
Gruß,
Jan
Hallo Jan
Bei GMX ist das der Fall. Bei anderen Providern ebenfalls. Ich bin darüber gestolpert und habe dauern auf dem Raspberry nach dem Fehler gesucht.
Siehe zum Beispiel hier:
https://www.pctipp.ch/praxis/kummerkasten/imap-pop3-e-mail-konto-gmx-thunderbird-einrichten-2519391.html
oder hier:
https://hilfe.web.de/pop-imap/einschalten.html
Gruss
Hans
Hi Hans,
ja, die Kommentare sind im Spamfilter gelandet, ich habe aber nun „den richtigen“ freigegeben.
OK, das war mir nicht bekannt (vermutlich, da ich keine Freemail-Anbieter nutze). Nur zum Verständnis: Wird das dann auch benötigt, wenn du z.B. mittels Thunderbird Mails über GMX senden und empfangen willst?
Auf jeden Fall danke für den Tipp!
Gruß,
Jan
Vielen Dank für die tolle Anleitung!
Musste unter Proxmox VE 7.4.-3 nur den Eintrag in „/etc/mail.rc“ anpassen, da
„set sendmail=“/usr/bin/msmtp -t““ beim Aufruf von „mail“ zu eine Fehlermeldung geführt hat:
„mail: /usr/bin/msmtp -t: No such file or directory
Can’t send mail: sendmail process failed with error code 1″
Funktioniert hat
set sendmail=/usr/bin/msmtp -t
oder
set sendmail=“/usr/bin/msmtp“
Den parameter „-t“ mag er wohl nicht in den Anführungszeichen und versucht das als Pfad aufzulösen..
Aber ansonsten mega – ich kann nun endlich von einem IONOS Postfach Mails aus der Kommandozeile schicken! :)
Hi,
bei mir war das komischerweise nicht notwendig. Dennoch aber vielen Dank für den Hinweis, ist vielleicht für andere Leser interessant, die über das gleiche Problem stolpern.
Gruß,
Jan
Sie sind meine Rettung. Mir fehlte die ganze Zeit „set_from_header on“ weil ich web.de nutze und ich bin fast verzweifelt.
Vielen Dank!