Linux: Einfach E-Mails versenden mit msmtp

Linux Mail Logo

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.

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).

msmtp: Speicherort der Konfigurations-Dateien
msmtp: Speicherort der Konfigurations-Dateien

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

Links

137 Kommentare zu „Linux: Einfach E-Mails versenden mit msmtp“

  1. 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.

    1. 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

  2. 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?

    1. 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

  3. 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

    1. Hallo Helix,

      das sieht mir eher aus wie ein Programmfehler (also kein Konfigurationsfehler). Hier würde ich mal den Entwickler kontaktieren.

      Gruß,
      Jan

  4. 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

    1. Hi Henning,

      ist -f bei Sendmail nicht die envelope from address? Hier gibt es eine Variable from in der msmtp-Config, welche lt. Doku wohl das gleiche macht.
      Wirkt das bei dir nicht?

      Gruß,
      Jan

  5. 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

    1. 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

      1. 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

      1. 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

  6. 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.

      1. 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

        1. 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

          1. 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!

  7. Benjamin Nierlich

    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

      1. 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.

  8. 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

    1. 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

      1. 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

        1. 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

          1. 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!

  9. 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 :)

    1. 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

      1. 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

  10. 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. :)

  11. 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?

    1. 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

      1. 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.

        1. 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

  12. 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?

    1. 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

  13. 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?

    1. 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

      1. 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.

        1. 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

          1. 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

        2. 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

          1. 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

          2. 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

          3. 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

          4. 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

          5. 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

          6. 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

          7. 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

  14. 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

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht.