DecaTec

Programmieren, Fotografie, Home-Server und einiges mehr

Linux: Einfach E-Mails senden mit sSMTP

Linux Mail Logo

Oftmals ist es sinnvoll, von einem Linux-System E-Mails zu versenden. Beispielsweise hätte man gern eine Benachrichtigung per Mail, wenn ein wichtiger Cronjob fehlgeschlagen ist, oder eine gewisse IP-Adresse auf Grund von zu vielen ungültigen Anmeldeversuchen durch Fail2Ban gebannt wurde.

Hier wäre es zunächst einmal denkbar, einen MTA (Mail Transfer Agent) wie Sendmail oder Postfix zu verwenden. Dies sind jedoch „echte“ Mail-Server, deren Einrichtung und Konfiguration alles andere als trivial ist. Ebenfalls ist es im Privatumfeld ohne feste IP-Adressen und ordentliche Zertifikate schwer, einen Mail-Server zu betreiben, da solche Server gut für Spam-Mails missbraucht werden könnten und daher von vielen „offiziellen“ Mail-Servern geblockt werden. Besser wäre daher eine leichtgewichtige Alternative zu einem „großen“ MTA.

Update-Historie
  • 08.01.2018:
    • Sicherheit: Setzen der Rechte für /etc/sstmp/ssmtp.comf.

Der einfache Ansatz: E-Mails mit sSMTP verschicken

sSMTP ist kein ausgewachsener MTA (wie eben Sendmail oder Postfix), sondern ein Programm, welches E-Mails von einem System (in diesem Fall einem Linux-PC) entgegennimmt und zu einem vorher konfigurierten „echten“ Mailserver (wie z.B. Google Mail) weiterleitet. Der große Vorteil von sSMTP ist dabei die einfache Konfiguration.

Die gezeigten Schritte für die Installation und Einrichtung von sSMTP beziehen sich auf eine Ubuntu Server Installation (siehe Ubuntu Server als Hyper-V Gastsystem installieren und optimal einrichten). Das Vorgehen ist allerdings auch leicht auf andere Systeme zu übertragen, wie z.B. einem Raspberry Pi (Affiliate Link) mit Raspbian.

Als Beispiel für die genutzte E-Mail-Adresse verwende ich ein Gmail-Konto. Hier kann aber auch ein Konto eines beliebigen anderen Mail-Providers (z.B. GMX, web.de, etc.) oder aber eines der Mail-Postfächer verwenden, die in den meisten Webhosting-Paketen enthalten sind. Ich selbst verwende dazu ein Webhosting-Paket von All-Inkl.com (Affiliate Link) und habe damit sehr gute Erfahrungen gemacht. Beim verwendeten Mail-Postfach ist dabei nur wichtig, dass der Zugriff über SMTP möglich ist (das veraltete POP3 reicht hier nicht aus). Die jeweiligen Zugangsdaten (SMTP-URLs, Ports, etc.) sind den Hilfeseiten des jeweiligen Anbieters zu entnehmen.

Generell ist es eine Überlegung wert, ein neues E-Mail-Konto einzurichten, welches fortan exklusiv für das Senden von E-Mails von dem jeweiligen System genutzt wird. Durch diese saubere Trennung bleibt der alltägliche Mail-Verkehr unbeeinträchtigt. Ebenso sollte man bedenken, dass die E-Mail-Zugangsdaten für sSMTP im Klartext in einer Datei gespeichert werden. Man kann den Zugriff auf diese Datei durch das Setzen entsprechender Berechtigungen etwas einschränken, dennoch hält sich er Schaden in Grenzen, wenn im Worst Case kein aktiv genutztes E-Mail-Konto kompromittiert wird.

Installation und Einrichtung sSMTP

Zunächst folgt erst einmal das obligatorische Update des Systems:

Anschließend werden zwei Pakete für sSMTP installiert:

Zur Konfiguration von sSMTP müssen noch Anpassungen an zwei Dateien vorgenommen werden. Zunächst die generelle Einrichtung von sSMTP:

Hier wird das E-Mail-Konto angegeben, welches zum Senden von Mails verwendet werden soll:

Alles, was hier groß geschrieben ist (Mail-Adresse, Benutzer und Passwort) muss natürlich individuell angepasst werden. Wenn SSL für die Verbindung zum STMP-Server benötigt wird (dies ist meistens der Fall), muss zusätzlich das Attribut UseSTARTTLS=YES verwendet werden.

Als nächstes erfolgt die Konfiguration, welcher (Betriebssystem-)Benutzer welches Mail-Konto nutzen soll:

Hier müssen sämtliche User eingerichtet werden, die nachher E-Mails verschicken sollen. Wenn also auch der Webserver-Benutzer (www-data) Mails verschicken soll, ist dieser hier ebenfalls mit aufzunehmen:

Test-Mail senden und Verbesserungen

Um nun eine E-Mail zu senden, reicht folgender Befehl aus:

Dabei ist es egal, wo der Befehl ausgeführt wird. Zum Testen passiert dies der Einfachheit halber direkt auf der Kommandozeile, ein praxisnahes Beispiel wäre das Senden einer Mail, wenn ein Cronjob gelaufen ist. Auch können nun E-Mails in jedem Bash-Skript verschickt werden.

Etwas unschön ist nun, dass beim Empfangen der E-Mail als Absender Benutzer@Computer-Name erscheint. Um hier die richtige Mail-Adresse anzugeben, muss noch eine kleine Anpassung vorgenommen werden:

Hier muss die Mail-Adresse nach folgendem Schema angegeben werden: Nach dem vierten Doppelpunkt steht der „echte“ Benutzername (quasi in Langform). Hier wird nun einfach die E-Mail-Adresse eingetragen. Das ganze muss nun wieder pro Betriebssystem-Benutzer durchgeführt werden. Hier ein Beispiel für den Benutzer root:

Achtung: Hier wirklich nur die Mail-Adresse nach dem vierten Doppelpunkt eintragen, ansonsten keine Änderungen vornehmen, weil dies sonst weitere Nebenwirkungen haben könnte.

Zu guter letzt setzen wir noch die entsprechenden Rechte auf die Datei ssmtp.conf, damit nicht jeder Zugriff auf die Konfiguration hat:

Fazit

Der Artikel hat gezeigt, wie man von einem beliebigen Linux-System einfach und unkompliziert E-Mails versenden kann, ohne einen eigenen Mail-Server aufsetzen und konfigurieren zu müssen. Für den schnellen E-Mail-Versand, z.B. als einfache Benachrichtigung bei bestimmten Ereignissen, ist die gezeigte Lösung allemal ausreichend.

Weiterführende Artikel

Links

, , , , ,

Kommentare: 7

  • Hans sagt:

    Hallo Jan,

    vielen Dank für die Anleitung.

    Wie schaut es mit der Sicheheit aus, alles in einer Konfig?

    Gruß Hans

    • Jan sagt:

      Hi Hans,

      du meinst sicher die ssmtp.conf: Hier werden die E-Mail-Zugangsdaten im Klartext gespeichert.
      Ich habe noch einen Hinweis auf die Vorteile des Verwendens eines exklusiven E-Mail-Kontos zum Senden von Mails über das Linux-System hinzugefügt. Ebenfalls wird nun erklärt, wie man etwas sichere Zugriffsrechte an der conf-Datei setzen kann.

      Gruß,
      Jan

  • Hans sagt:

    Hallo Jan,

    hast du ein paar gute Tips bezüglich crontab (crontab-e) in Verbindung ssmtp. Z. B. eMail-Benachrichtigung im Fehlerfall von gewissen Logs. Ich habe leider keine gute Anleitung (wie deine) hierzu gefunden.

    Gruß Hans

    • Jan sagt:

      Hi Hans,

      also wenn ein Cronjob-Befehl eine (Konsolen-)Ausgabe hat (und natürlich ein MTA eingerichtet ist), dann wird dem Administrator bei nach Ausführen des Cronjobs automatisch eine Mail mit dieser Ausgabe zugeschickt. Um dies zu unterbinden, muss die Ausgabe „ins Nirvana“ weitergeleitet werden (mit > /dev/null 2>&1 am Ende). Mehr Infos über automatischen E-Mail-Versand bei Cronjobs findest du hier.
      Ansonsten kannst du den Output eines jeden Programms auch explizit an mail „weiter-pipen“, also <Befehl> | mail -s „Betreff“ adresse@provider.de.

      Gruß,
      Jan

      • Hans sagt:

        Hallo Jan,

        danke, ist nicht ganz was ich gesucht habe.

        Du hat oben einen kleinen Fehler.
        Ich glaube du meinst das so.

        chown root:mail /etc/ssmtp/ssmtp.conf
        chmod 640 /etc/ssmtp/ssmtp.conf

        Gruß Hans

Schreibe einen Kommentar

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