DecaTec

Home-Server | Linux | Nextcloud | Raspberry Pi | Programmierung | Fotografie

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 16.05.2019)
  • 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:

Anschließend wird msmtp installiert:

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:

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:

Der Inhalt kann beispielsweise so aussehen (hier am Beispiel eines fiktiven Mail-Accounts meinedomain.de):

Alle Einstellungen, die man individuell anpassen muss, sind hier mit „# TODO“ gekennzeichnet. Bitte auch die Kommentare in der Datei beachten.

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

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:

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:

Nach der erfolgten Konfiguration vom msmtp können E-Mails nun ganz einfach über die Kommandozeile verschickt werden:

Am besten gleich mal ausprobieren, indem ihr euch selbst eine Test-E-Mail schickt.

Weitere Konfiguration (Fail2ban)

E-Mails können nun also über die Kommandozeile verschickt werden. Allerdings wird man dies auf einem Server nicht sonderlich häufig machen. Hier ist es eher wichtig, per E-Mail bei wichtigen Meldungen des Systems benachrichtigt zu werden.

Damit Mails über msmtp auch bei der Ausführung von Cronjobs oder bei einem erfolgten Ban von Fail2ban verschickt werden, sind noch ein paar wenigen Schritte notwendig.

Dazu muss msmtp noch als Mail-Programm festgelegt werden. Dies geschieht durch folgende Datei:

Der Inhalt sieht dabei folgendermaßen aus:

Anschließend können auch von Fail2ban E-Mails gesendet werden, wenn z.B. eine IP auf Grund von zu vielen ungültigen Anmeldeversuchen gebannt wurde.

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

, , , , , , ,

Kommentare: 22

  • Verena sagt:

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

    • Jan sagt:

      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

  • Patrick sagt:

    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

  • Bernhard sagt:

    Vielen Dank für den Tipp.

    LG Bernhard

  • Patrick sagt:

    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

    • Jan sagt:

      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

      • Patrick sagt:

        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?

        • Jan sagt:

          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

          • Bernd sagt:

            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

  • Bernd sagt:

    ohne am ende geht es… :D
    Das PW ist nicht das Problem auch wenn zig Sonderzeichen enthalten sind

    Gruß Bernd

    • Jan sagt:

      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

  • Frank Hennen sagt:

    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

  • David sagt:

    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?

  • Heinz sagt:

    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

    • Jan sagt:

      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

      • Heinz Weber sagt:

        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

        • Jan sagt:

          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

    • Jan sagt:

      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

  • Heinz sagt:

    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

    • Jan sagt:

      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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.