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
Hallo Jan,
danke für die Anleitung. Nach einigem Herumprobiere hat es doch geklappt.
Nur als Hinweis: Bei mir wurden beim Bannen zunächst keine E-Mails verschickt. Das Versenden hat erst geklappt, nachdem ich die entsprechenden E-Mail-Adressen auch noch in der /etc/fail2ban/jail.conf eingetragen hatte. Jetzt läuft es aber problemlos. :-)
Hallo Verena,
ja, für fail2ban muss die E-Mail-Adresse, an die gesendet werden soll noch in den Jail-Files angegeben werden. Da es hier primär nicht um fail2ban geht, habe ich dieses Detail weggelassen. Aber es wurde hier schon einmal thematisiert.
Dennoch würde ich diese Änderungen nicht direkt in die jail.conf Datei eintragen, sondern mit eine separate jail.local anlegen. Die bleibt dann auch bei einem Update von fail2ban erhalten.
Gruß,
Jan
Danke für den Tipp, Verena.
Hat bei mir geklappt.
LG Andreas
Hallo Jan,
chmod 600 funktioniert bei mir nicht, ich erhalte die Fehlermeldung:
’sendmail: account default not found: no configuration file available‘
ich muss chmod 644 setzen, dann geht es.
Gruß
Patrick
Hi,
für alle anderen die den Weg wählen, das Passwort in das Config File z schreiben:
Erstellt eine Gruppe für alle user, die Mails senden können sollen und fügt die User zu der Gruppe hinzu.
Dann „chown 640 root:mailergruppe /etc/msmtprc“. Damit können alle User die Systemconfig lesen, die Mails schreiben können sollen und weitere User können die Datei nicht mehr auslesen.
Vielen Dank für den Tipp.
LG Bernhard
Hallo Jan,
ein anderer Patrick hier. Leider bekomme ich folgenden Fehlermeldung wenn ich msmtprc nach deinen Vorgaben aufsetze:
-bash: syntax error near unexpected token `newline‘
Kannst du mir weiterhelfen
Hi Patrick,
dann hat sich wohl irgendwo ein Schreibfehler eingeschlichen. Bitte die Inhalte der Datei nicht per Copy/Paste übernehmen (da gibt’s häufiger mal Probleme), sonder manuell eintragen.
Dann sollte der Fehler eigentlich nicht mehr erscheinen.
Gruß,
Jan
Habe die Datei nochmals komplett durchgeschaut, ebenso 73 Zeilen wie du und zwei Fehler beseitigt. Trotzdem bekomme ich weiterhin diese Fehlermeldung. Hast du noch einen anderen Tipp?
Hi Patrick,
OK, dann tippe ich mal auf das Passwort – dieses enthält schätzungsweise irgendwelche Sonderzeichen, die von Bash interpretiert werden.
Ob wirklich das Passwort schuld daran ist, kannst du auch testen, indem du einfach ein Passwort ohne Sonderzeichen eingibst. Dann sollte der ursprüngliche Fehler erst einmal weg sein, nur Mails können dann nicht gesendet werden.
Wenn es wirklich an Sonderzeichen im Passwort lag, dann pack mal das Passwort in Anführungszeichen, also z.B.:
password "pAssW0Rd123"
Gruß,
Jan
Hallo Habt ihr eine Lösung für das Problem gefunden?
Denn ich habe genau das gleiche Problem :(
Das mit dem PW habe ich bereits versucht, aber es ändert nichts an der Fehlermeldung:
root@nextcloud:~# echo „TEST“ | mail -s „Betreff“
bash: syntax error near unexpected token `newline‘
root@nextcloud:~#
Vielen Dank
Gruß Bernd
ohne am ende geht es… :D
Das PW ist nicht das Problem auch wenn zig Sonderzeichen enthalten sind
Gruß Bernd
Hi Bernd,
ich glaube, da hat das Kommentar-System das Zeichen (vermutlich ein Sonderzeichen) verschluckt. Welches ist es genau? Kannst mir auch gern per Mail zukommen lassen, dann kann ich das hier noch nachträglich einfügen und den Artikel ggf. um einen Hinweis ergänzen.
Gruß,
Jan
Hallo zusammen,
bei mir hat die Testmail erst funktioniert, nachdem ich die /etc/mail.rc angelegt habe. Vorher kam immer eine Fehlermeldung, dass der Prozess mit Error Code 65 aussteigt. Dies habe ich im Google als Grund leider nicht gefunden.
Gruß
Frank
Hallo Jan,
egal was ich versuche, die Antwort lautet immer:
„mail: Nachricht kann nicht gesendet werden: Prozess wurde mit einem von Null verschiedenen Status beendet“
Hast du einen Tip für mich?
Hi David,
schau mal in die Datei /var/log/mail.err. Hier sollte eine genaue Fehlermeldung zu finden sein.
Gruß,
Jan
Hi Jan,
jetzt hänge ich gerade am Versand der Mail ^^
test halber wollte ich das ganze über meine Gmail Adresse erstmal testen.
Ich erhalte die gleiche Fehlermeldung nur ist bei mir die mail.err unter /var/log/ leer ? warum?
muss ich da den Port in /etc/msmtprc entsprechend auf die 465(laut gmail) anpassen oder lasse ich den auf 587? allerdings erhalte ich bei beiden Varianten die gleiche Fehlermeldung.
Danke und Gruß
Flo
Hi,
steht vielleicht etwas im Syslog?
Die verwendeten Ports musst du von deinem Mail-Provider ermitteln. Das können auch andere Ports sein.
Gruß,
Jan
Hallo Jan,
vielen Dank für deine sehr gute Beschreibung. Ich habe alles nach deiner Vorgabe installiert. Bei Ausführung im Terminal funktioniert alles wie gewollt. Allerdings wenn mir der Rechner (Stretch) beim Systemstart eine E-Mail mit diversen Infos zuschicken soll, klappt das nicht. Dazu habe ich eine Datei emailnotify.desktop in Autostart angelegt. Hier wir ein Script aufgerufen, das den E-Mailversand startet. Vor dem Versand wartet das Script mit sleep 60. Wenn ich das Script in emailnotify.desktop aufrufe kommt folgende Fehlermeldung:
„msmtp: TLS Aushandlung fehlgeschlagen: The TLS connection was non-properly terminated. msmtp: konnte Mail nicht verschicken (Account default aus /home/pi/.msmtprc)
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 „
Wenn ich aber die Scriptdatei zweimal hintereinander in emailnotify.desktop aufrufe, dann wird die E-Mail einmal versendet.Hast du dazu eine Erklärung und vielleicht eine Lösung. Vielen Dank im Voraus.
Viele Grüße
Heinz
Hallo Heinz,
also die Meldung mit TLS sollte eigentlich nicht für das erfolglose Übertragen verantwortlich sein. Hier wird die TLS-Verbindung nicht ordentlich beendet, aber die Mail sollte schon rausgegangen sein.
Schau doch mal in das Log von msmtp: /var/log/msmtp.log
Vielleicht stehen hier noch andere Fehlermeldungen drin.
Gruß,
Jan
Hallo Jan,
vielen Dank für deine Antwort. Ich habe eine Log-Datei aktiviert und folgende Meldung erhalten (E-Mailadressen sind fiktiv!):
„Jun 28 09:07:11 host=mail.abc.de tls=on auth=on user=pi@abc.de from=pi@abc.de recipients=home@xyz.com errormsg=’TLS Aushandlung fehlgeschlagen: The TLS connection was non-properly terminated.‘ exitcode=EX_PROTOCOL“
Vielleich kannst du damit etwas anfangen!?
Viele Grüße
Heinz
Hallo Heinz,
ist es nach wie vor so, dass es beim zweiten Aufruf dann klappt? Dann kann man einen Fehler in der Konfiguration ausschließen.
Leider sagt mir diese Fehlermeldung nichts und eine Suche im Web liefert auch keine brauchbaren Informationen.
Was passiert zwischen den beiden Aufrufen?
Gruß,
Jan
Hat mir geholfen, allerdings scheint sich bei der Festlegung in /etc/mail.rc ein Fehler eingeschlichen zu haben.
Gebe ich die Zeile so an, wie vorgegeben, erhalte ich beim Aufruf:
mail: Cannot start ‚/usr/bin/msmtp -t‘: executable not found (adjust *mta* variable)
Lasse ich die Anführungszeichen weg, also
set sendmail=/usr/bin/msmtp -t
klappt es.
arch linux, bash 5.0.7
Hallo Hans,
das scheint dann aber etwas Arch-spezifisches zu sein. Unter Ubuntu hatte ich mit der gezeigten Anleitung noch keine Probleme.
Aber danke für den Tipp, dieser könnte auch für andere interessant sein.
Gruß,
Jan
Auf meinem PROXMOX / debian System musste ich die „“ auch weg lassen, danke für den Tipp!
Hallo Jan,
zwischen den beiden Aufrufen ist nur eine sleep 60 eingebaut. Auch wenn ich vor dem ersten Aufruf die Wartezeit vergrößere, wird die gleiche Fehlermeldung geliefert.
Gruß
Heinz
Hallo Heinz,
puh, das kann ich mir echt nicht erklären.
Ruf doch msmtp in einem Skript auf, welches den Rückgabewert des Programms auswertet. Wenn dieser einen Fehler anzeigt, dann einfach msmtp nochmals aufrufen.
Das ist zwar nicht unbedingt schön, wäre aber ein Workaround.
Gruß,
Jan
Danke für die Info mit der /etc/mail.rc
Ich bekam vorher mit dem mail command immer die Meldung:
mail: cannot send message: Process exited with a non-zero status
Die Error Ausgabe (echo $?) war 36.
Nach dem erstellen der mail.rc und dem Inhalt, klappt alles auf anhieb.
Hallo,
vielen Dank für die ausführliche Anleitung!
Leider funktioniert (nur bei mir?) die Interpretation von /etc/aliases nicht: obwohl im debug-output der aliases-Pfad korrekt wiedergegeben wird, werden die Benutzernamen in /etc/aliases nicht interpretiert. Stattdessen wird als Empfängeradresse das übliche benutzername@hostname gesetzt.
Wenn ich allerdings bsd-mailx anstatt mailutils installiere (und die /etc/mail.rc belasse, wie sie ist) funktioniert alles korrekt.
Hi Michl,
welche .msmtprc Datei hast du bearbeitet/angelegt? Unter /etc, oder unter dem Home-Verzeichnis der entsprechenden User?
Wenn es allerdings mit bsd-mailx funktioniert, dann sollte man das so belassen, oder?
Gruß,
Jan
Hi,
ich habe die msmtprc unter /etc angelegt.
Klar werde ich es belassen – die Frage ist aber, wieso es mit mailutils nicht funktioniert. Es wäre interessant, ob das bei jemand anderem funktioniert – falls nicht, solltest du evtl. deine Anleitung adaptieren.
Viele Grüße!
Ist hier auch so. Warum auch immer. Es funktioniert nur mit bsd-mailx _nicht_ mit den mailutils.
Vielleicht hilft es ja jemand….
Hi Thorsten,
leider kann ich das Problem immer noch nicht nachvollziehen.
Habe msmtp vor kurzem auf mehreren Servern (Ubuntu) erfolgreich eingerichtet und hatte damit keine Probleme.
Gruß,
Jan
Hallo Jan,
ich habe jetzt mal den Schwenk von ssmtp zu msmtp gemacht.
Die Installation haz gut funktioniert. Fail2Ban und der letzte Test in der Anleitung funktioniert auch.
Leider bekomme ich keine Mails von meinen cron- Jobs (crontab -e). Mit ssmtp hat es noch funktioniert.
In der crontab -e Datei habe ich als erste Zeile MAILTO=meinMail@provider.de eingetragen.
Leider finde ich auch keine Log Dateien von msmtp.
Hast Du noch einen Ansatz?
Grüße
Hans
Hallo Hans,
es kommt immer darauf an, mit welchem User der Cronjob ausgeführt wird. Daher solltest du zunächst einmal probieren, mit diesem User eine Mail per Kommandozeile zu senden.
Klappt das denn?
Ansonsten vielleicht auch mal ins syslog schauen, ob hier zur Laufzeit des Cronjobs irgendwelche Meldungen ausgegeben werden.
Gruß,
Jan
Hallo Jan,
ich erstelle die cron-jobs als root. Dieser kann über die Kommandozeile eine Mail rausschicken.
Im Syslog steht:
sendmail: 554 Unauthorized sender address
sendmail: konnte Mail nicht verschicken (Account default aus /etc/msmtprc)
In der /etc/msmtprc ist
account default: bob@meindedomain.de
eingetragen.
Seltsam finde ich, das Fail2ban mir Mails schicken kann.
Gruß
Hans
Hi Hans,
versuch mal, eine Konfigurations-Datei unter dem Home-Verzeichnis des Users anzulegen (also ~/.msmtprc). Hier gab es hin und wieder schon Probleme, dass die allgemeine /etc/.msmtprc nicht richtig angezogen wurde.
Gruß,
Jan
Hallo Jan,
Dein Tip mit der ~/.msmtprc hat leider nicht funktioniert.
Jetzt habe es aber hinbekommen.
Allerdings nutze ich jetzt eine Gmail Adresse. Bei Gmx hat es nicht funktioniert.
Bei Gmail musste ich dann noch den Zugriff durch weniger sichere Apps zulassen.
Was könnte man noch machen, damit die GMX Adresse funktioniert?
Gruß
Hans
Hi Hans,
OK, dann liegt es wohl an GMX selbst. Welche Einstellungen du hier verwenden musst, kann ich dir aber leider auch nicht sagen, da ich kein GMX verwende.
Vielleicht einfach mal ein wenig rumprobieren.
Gruß,
Jan
Bei mir klappte es nur mit einem Eintrag
set sendmail=“/usr/bin/msmtp“, also ohne das „-t“ in /etc/mail.rc.
Aber ganz vielen Dank für die fantastische Zusammenstellung!!
Zur Info :
ich habe das auf dem Raspi (Buster) mit einem mailbox.org Account eingerichtet.
In der /etc/msmtprc musste ich noch den Parameter tls_starttls auf off stellen da
hier TLS ohne STARTTLS über Port 465 (smtps) genutzt wird.
Ohne diesen Änderung hing der Aufruf der Testmail ohne eine Meldung.
Hallo Tom,
OK, danke für den Hinweis!
Die korrekte Konfiguration hängt immer auch vom verwendeten Mail-Provider ab, so dass ich hier leider keine allgemeingültige Anleitung abliefern kann.
Gruß,
Jan
Hallo Jan,
ich bin unter Debian unterwegs und meine auch deine Anleitung sauber ausgeführt zu haben, aber irgendwo hakt es dennoch.
Ich bekomme bei meiner Testmail folgende Meldungen:
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
Das Problem im Grunde ist, das ich kein Log finde…
Ich habe sogar in der msmtprc den folgenden Eintrag für eine separates Log eingetragen
logfile /opt/log/msmtp.log
(https://marlam.de/msmtp/msmtp.html#General-commands)
(und die Datei auch angelegt) allerdings bleibt diese ebenfalls leer…
Noch eine Info: Ich hab die msmtprc sowohl unter ~/. also auch unter /etc/ angelegt (inhaltlich gleich)
Hast du eine Idee für mich?
Viele Grüße
ein anderer Jan
Hallo anderer Jan ;-)
schau mal, ob die entsprechende Datei auch wirklich hier zu finden ist: /usr/bin/msmtp (und nicht z.B. /usr/local/bin/msmtp).
Gruß,
Jan
Hi!
Ja, die Datei msmtp ist genau hier zu finden /usr/bin
Noch eine Idee? Vielleicht wie ich an ein lesbares Log komme? :-)
Viele Grüße
Jan
Hi,
wenn in den Logs zu msmtp nicht zu finden ist, dann schau doch mal im syslog nach.
Gruß,
Jan
Hi,
das schweigt sich auch aus.
Nachdem ich den Testabruf abgesetzt habe, ändert sich keines der Logs aus /var/log/
Ich habe gerade noch gesehen, dass es noch eine Info-Zeile gibt:
msmtp: /home/pi/.msmtprc: enthält Passwörter und muss daher Ihnen gehören
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
Und während ich das hier schreibe, klingelt es im Kopf! Die Datei „/home/pi/.msmtprc muss also „mir“ also dem User „pi“ gehören, denn der führt den „echo“-Befehl aus.
Okay, dann habe ich also die Datei per „sudo chown pi:pi“ dem User zugeordnet.
Nun bekomme ich folgende Meldung:
msmtp: /home/pi/.msmtprc: enthält Passwörter und darf daher Lese-/Schreibrecht nur für den Eigentümer haben
Das verstehe ich dann wieder nicht, weil ich die Datei dem User „pi“ zugeordnet habe.
Habe dann noch per „chmod 777“ der Datei „alle Rechte“ zugeordnet, der Fehler bleibt aber der Gleiche…
Sry für den vielen Text, aber ich wollte meine Schritte so detailliert wie möglich angeben.
Und ach ja, als „root“ funktioniert der Mailversand nun, das hatte ich erst jetzt testet…
Viele Grüße und vielen Dank für deine fixe Hilfe, echt stark!
Jan
Hi Jan,
müsste die Datei dann nicht per chmod die Rechte 700 zugeordnet bekommen? Nur dann hat nur der Owner alle Rechte, alle anderen nicht.
Gruß,
Jan
Danke für das Tuto, endlich funktioniert’s!
Es funktioniert soweit alles, außer der Versand über cron, hier wird die Mail als
From: root (Cron Daemon)
versendet, dass führt leider dazu, dass der smtp Server die Mail ablehnt
550-5.7.1 [194.59.204.53 14] Messages missing a valid address in From:
550 5.7.1 header, or having no From: header, are not accepted.
Mit dem ssmtp hat das bisher funktioniert.
Wie kann ich denn die From Adresse für den cron einstellen?
Hi Dirk,
welche Version der msmtprc hast du verwendet? Die globale, oder die User-spezifische?
Gruß,
Jan
Hi,
ich habe beide angelegt die globale unter /etc und die user unter /home… mit selbem Inhalt.
Es funktioniert wie gesagt generell ja nur sendet cron mit einer eigenen FROM Adresse.
Hi,
vielleicht noch unter /etc/aliases die entsprechenden Aliase eintragen. Hier sollte aber eigentlich der „default“-Eintrag alles erwischen…
Gruß,
Jan
Hab ich natürlich gemacht wie in der Anleitung.
Bei anderen z.b. Apticron funktioniert es ja auch nur bei conjobs nicht,
dass Problem ist wohl auch bekannt, denn der cron überschreit die FROM Zeile.
Was mich wundert ist, dass es mit ssmtp funktioniert hat, hier kann ich aber im ssmtp einstellen ob eine FromLineOverride erlaubt ist oder nicht.
Hi Dirk,
puh, da bin ich gerade etwas überfragt. Unter welchem User läuft denn der Cronjob, bzw. was ist an dem User speziell?
Gruß,
Jan
Hi Jan,
eigentlich nichts er läuft als root es liegt wohl tatsächlich am cron der als Absender „root (Cron Deamon)“ verwendet statt der mail die in der msmtp Konfig als from konfiguriert ist.
Blöde Frage
der Einstrag
set sendmail=“/usr/bin/msmtp -t“
funktioniert bei mir nicht es geht nur ohne „“ also
set sendmail=/usr/bin/msmtp -t
kann es hieran liegen? für was steht denn die Option -t?
Gruß
Dirk
Hi Dirk,
wundert mich aber dennoch ein wenig. Ich sende auch Mails mit einem Cronjob, der als root ausgeführt wird und hier wird die richtige Absenderadresse angegeben. Nutzt du Ubuntu, Debian, oder ganz was anderes?
Die Option „-t“ setzt den „Sendmail-Mode“, siehe hier.
Gruß,
Jan
Hi Jan,
ich nutze Debian Buster ohne GUI
Okay muss das dann in „“ oder nicht? vielleicht ist das, dass Problem aber bei set sendmail=“/usr/bin/msmtp -t“ bekomme ich folgende Fehlermeldung
mail: /usr/bin/msmtp -t: No such file or directory
Can’t send mail: sendmail process failed with error code 1
Hi Dirk,
das „-t“ ist ja nur ein Parameter. Die Fehlermeldung deutet aber eher darauf hin, dass er die Datei /usr/bin/msmtp nicht finden kann.
Wenn doppelte Anführungszeichen nicht funktionieren, dann nimm mal einfache Anführungszeichen.
Gruß,
Jan
Hi,
also es liegt an dem -t ohne diesen Parameter tritt die Fehlermeldung nicht auf.
Hi Dirk,
versuch doch mal, folgendes Paket zu installieren: msmtp-mta
Ich vermute mal, dass ihm nicht msmtp selbst fehlt, sondern eine Abhängigkeit, die durch „msmtp -t“ unter der Haube aufgerufen wird.
Gruß,
Jan
Hi Jan,
das Paket ist ja installiert steht ja auch so in der Anleitung und wenn ich es richtig verstanden habe, legt das nur einen Symlink unter /usr/sbin/sendmail an und auch dieser ist vorhanden
msmtp-mta ist schon die neueste Version (1.8.3-1)
ls -al /usr/sbin/sendmail
lrwxrwxrwx 1 root root 12 Feb 15 2019 /usr/sbin/sendmail -> ../bin/msmtp
Hi Dirk,
puh, dann bin ich erst einmal echt überfragt.
Aber es funktioniert bei dir ja, außer dass ein falscher Absender angezeigt wird, oder?
Wenn ich dazu noch etwas in Erfahrung bringe, melde ich mich noch einmal.
Gruß,
Jan
Bin gerade auch auf das Problem gestoßen. Auch bei mir führt das Weglassen der „“ zum Ziel.
Auf diesem Weg noch vielen Dank für deine Anleitung, Jan!
Gruß Harald
Hi,
also die Datei existiert unter /usr/bin/msmtp root:msmtp 755
Die Fehlermeldung kommt sowohl bei doppelten als auch einfachen Anführungszeichen
Hallo zusammen,
vielen Dank für die Anleitung zur Installatioin von msmtp.
Die Eingabe vom Befehl:
echo „Inhalt der E-Mail“ | mail -s „Betreff“ test@mail.de
liefert Fehlerausgabe:
msmtp: account default not found: no configuration file available
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
Nachdem die „Einführungszeichen“ in der Datei /etc/mail.rc entfernt wurden:
set sendmail=/usr/bin/msmtp -t
bekomme ich folgende Fehlerausgabe:
msmtp: no recipients found
mail: Sending data to /usr/bin/msmtp failed: Process exited with a non-zero status
mail: cannot send message: Process exited with a non-zero status
Die /var/log/mail.err und /var/log/mail.log sind leer. Die Dateie /var/log/msmtp.log existiert leider nicht.
Kann mir bitte jemand weiter helfen? Vielen Dank im Voraus.
Beste Grüße
André
Hi André,
welche Konfigurations-Datei hast du verwendet (global oder per User)? Vielleicht auch mal die jeweils andere Datei anlegen/ausfüllen.
Gruß,
Jan
Hallo Jan,
gute, nachvollziehbare Anleitung.
Ich habe allerdings der Domain auf meinem Server, eine Internetseite (WordPress) und zwei Magenta Shops.
IKann ich msmtp so konfigurieren, dass aus allen drei Domain die Mail an den
jeweiligen SMTP Server des Provider (IONOS) verschickt werden?
Gruß, Roland
Hi Roland,
ich denke das wird nicht gehen, denn die Mail-Settings von msmtp sind immer nur pro Account. Das kann man meines Wissens nach nicht als „Mail-Proxy“ verwenden.
Gruß,
Jan
Hallo Jan,
erst mal vielen Dank für die Zusammenstellung.
wenn man die Test Mail in der Kommando Zeile ausführt
echo „Inhalt der E-Mail“ | mail -s „Betreff“ test@mail.de
kann man sich die Anführungszeichen auch sparen. Nur wenn der Betreff aus zwei getrennten Wörtern besteht, dann braucht man sie dort wieder.
Wenn man aber aus einem c++ Programm mit system also
system (“ echo Inhalt der E-Mail | mail -s Betreff test@mail.de“ )
eine mail verschicken will, dann dürfen dort keine weiteren außer den Aussen -Anführungszeichen vorhanden sein.
So nun zu meiner Frage mit der ich nicht weitergekommen bin:
ich möchte aus meinem C++ Programm eine email mit einem Meßwert verschicken. So etwa
system („Der Meßwert lautet: X Einheiten | mail -s Messwert_aktuell messung@mail.de„)
X ist ein numerischer Messwert. X kann ich auch in einen char Wert umwandeln, aber das ändert nichts. In der mail bleibt es bei einem Buchstaben.
Ist das jetzt ein msmpt oder ein C++ Problem?
Grüße
Norbert
Hi Norbert,
in C++ gibst du ja den Wert in Hochkommata direkt als String aus. Müsste das daher nicht in etwa so aussehen (value ist dein numerischer Meßwert):
string str = "Der Meßwert lautet: " + value + " Einheiten";
system ("printf(str) | mail -s Messwert_aktuell messung@mail.de")
Sorry, meine C++ Kenntnisse sind etwas eingerostet, aber vielleicht bringt dich das ja auf die richtige Fährte.
Gruß,
Jan
Hallo Jan,
nee, das funktioniert nicht. Das Problem scheint bei dem msmpt zu liegen.
In C++ kann ich die Strings und Werte beliebig zusammenpacken usw.
Aber msmpt interpretiert alles was vor dem | steht nur als alphanumerischen Text. Sonderzeichen werden entweder ignoriert oder führen zu der Aussage, daß der Email Text leer sei.
Habe auch mal ein wenig gesucht, aber die Information beschränken sich alle darauf, wie man den das mail Programm konfiguriert und mit Text „füllt“.
Also mir fällt jetzt erst mal nichts mehr ein.
Grüße
Norbert
Hi Norbert,
kannst du mit C++ eine (Bash-)Variable füllen?
Denn so etwas geht (rein auf der Bash):
test = 5
echo "Inhalt der E-Mail " + $test | mail -s "Betreff" meine@mail.de
Gruß,
Jan
Moin Jan,
Nein, in C++ und auch in den anderen C’s kann man das also das Füllen einer Kommandozeilen Variable nicht machen. Habe jedenfalls keine Möglichkeit gefunden.
Das bash Zeilen Beispiel konnte ich realisieren.
Das Problem ist wohl, daß der system Befehl einen const char erwartet. Und den habe ich ja nicht.
Tja…
Grüße
Norbert
Moin Jan,
ich habe mir jetzt mal folgende Lösung ausgedacht.
Speichern des Meßwerts durch das C Programm in einer Text Datei
Dann eine batch Programm, das
den Inhalt der Text Datei ausliest
den Inhalt der Text Datei in eine bash Variable packt
und mit dieser Variablen das Mail Programm aufruft
Man könnte natürlich auch gleich die Text Datei als Anhang in eine Mail packen, aber dann wird das Auslesen am Handy wieder aufwendiger.
So, jetzt muß ich mir „nur“ noch die batch Datei zusammenbasteln.
Hört sich das machbar an??
Grüße
Norbert
Hi Norbert,
ist denke ich mal ein wenig „von hinten durch die Brust ins Auge“, aber allemal machbar. ;-)
Gruß,
Jan
Moin Jan,
ja, der Spruch „von hinten durch die Brust ins Auge“ ist mir dabei auch eingefallen. :-) Aber was soll’s, so funktioniert es. Das kleine Rechnerlein muß so halt ein bißchen mehr ackern. Aber der kann das…
Na ja, und ich muß ja nun immer erst mal was auf die SD Karte schreiben.
Vielleicht finde ja noch mal was „eleganteres“
Grüße
Norbert
Hallo Jan,
hier in den Fragen wurde ja auch so vor einem Jahr mal nach dem mail.log gefragt und festgestellt, daß dieses log bei dem Fragenden leer war. Ich hatte jetzt auch das Problem, daß irgendwann irgendwie mails nicht angekommen sind. Deshalb wollte ich nun mal etwas genauer schauen, wo das Problem liegt.
Zu dem Problem des leeren mail.logs habe ich jetzt bei dir und im Internet nichts gefunden, dabei lag die Lösung doch so nah!!
Ganz einfach: Voreingestellt ist bei msmtp, daß KEIN log geschrieben wird!!
Man muß das Schreiben erst einschalten in dem man in die msmtprc Datei eine Zeile mit
syslog LOG_MAIL
hinzufügt.
Dann füllt sich auch die mail.log Datei. Ob jetzt nun auch in die mail.err Datei im Fehlerfall hineingeschrieben wird, konnte ich noch nicht feststellen, da natürlich jetzt erst mal kein Fehler aufgetreten ist.
Grüße
Norbert
Hi Norbert,
gut, das ist sicher ein guter Hinweis, wenn es nicht auf Anhieb klappt.
Danke für die Rückmeldung!
Gruß,
Jan