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

  • 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

  • Niko sagt:

    Hallo Jan,

    ich habe die Konfiguration wie du es beschrieben hast vorgenommen, allerdings wird mir beim versenden der Testnachricht folgender Fehler angezeigt:
    mail: Nachricht kann nicht gesendet werden: Prozess wurde mit einem von Null verschiedenen Status beendet

    kannst du damit was anfangen?

    Grüße
    Niko

  • Elies sagt:

    Super Anleitung wie immer! Vielen Dank.

    Gruß
    Elies

  • Dominik sagt:

    Hallo Jan,

    du sagst POP3 als veraltetes Protokoll reicht nicht aus. Aber das hat doch nichts mit einem „Alter“ zu tun sondern damit, dass SMTP fürs Versenden von Mails und pop3 nur für den Empfang (auflisten, abrufen, löschen).
    Oder bin ich da auf dem falschen Dampfer?

    Ansonsten sehr toller Artikel und allgemein toller Blog. Hab ich erst vor kurzem entdeckt und deine Anleitung für NextCloud hat mir sehr geholfen!

    VG
    Dominik

    • Jan sagt:

      Hallo Dominik,

      das mit dem „veralteten POP3-Protokoll“ ist hier vielleicht etwas überspitzt formuliert. Trotzdem ist SMTP sehr viel fortschrittlicher und in der heutigen Zeit das Protokoll der Wahl. Meine Formulierung sollte einfach nur bedeuten: Das hier gezeigte Vorgehen wird mit einem Mail-Account, welcher nur POP3 unterstützt, nicht funktionieren.

      Gruß,
      Jan

  • Murderhead sagt:

    Hey Jan,

    Irgendwie scheint das mit einer T-Online E-Mail Adresse nicht zu Funktionieren. Ich bekomme immer folgenden Fehler:

    mail: cannot send message: Process exited with a non-zero status

    Eine Idee wodran das liegen könnte?

    • Jan sagt:

      Hi,

      also mit dem Fehler kann ich spontan nicht viel anfangen.
      Allerdings scheint das Programm „mail“ hier das Problem zu sein. Wie schickst du denn die Mail ab? Probier mal direkt auf der Console eine Mail zu schicken: echo „Mail-Inhalt“ | mail -s „Betreff“ meine-mail-adresse@gmail.com
      Vielleicht hilft auch ein Blick ins Log unter /var/log/mail.log um eine aussagekräftigere Fehlermeldung zu sehen.

      Gruß,
      Jan

      • Murderhead sagt:

        Hey Jan,

        Das Log-File bringt mich auch nicht wirklich weiter.

        echo „Mail-Inhalt“ | mail -s „Betreff“ meine-mail@meine-domain.tld

        tail -f /var/log/mail.log
        Mar 24 15:16:37 irgendeinhostname sSMTP[10087]: Creating SSL connection to host
        Mar 24 15:18:07 irgendeinhostname sSMTP[10087]: Invalid response SMTP Server (STARTTLS)
        Mar 24 15:18:07 irgendeinhostname sSMTP[10087]: Cannot open securesmtp.t-online.de:465

        Grüße

        • Jan sagt:

          Hi,

          das sieht dann doch so aus, als ob die Konfiguration von sSMTP für T-Online nicht korrekt ist. Ich selbst nutze kein T-Online, habe aber das und dies zu diesem Thema gefunden. Vielleicht hilft das ja weiter.

          Gruß,
          Jan

          • Murderhead sagt:

            Hay Jan,

            leider hat der User dort es auch nicht Hinbekommen. Den Port habe ich inzwischen auf 587 geändert da ich herausgefunden habe das STARTTLS über Port 587 oder Port 25 läuft. Wenn ich nun mit „echo „Test“ | sendmail -v meine-mail@meine-domain.tld“ versuche eine Mail zu verschicken bekomme ich folgenden Fehler:

            „535 5.7.0 Authentication rejected / Connection-failure. Username or password incorrect. Please be aware, that the e-mail password is mandatory here. E-Mail-Adresse oder Passwort ungueltig! Bitte beachten Sie, dass hier das E-Mail-Passwort notwendig ist: http://www.t-online.de/email-passwort
            sendmail: Authorization failed (535 5.7.0 Authentication rejected / Connection-failure. Username or password incorrect. Please be aware, that the e-mail password is mandatory here. E-Mail-Adresse oder Passwort ungueltig! Bitte beachten Sie, dass hier das E-Mail-Passwort notwendig ist: http://www.t-online.de/email-passwort)“

            T-Online scheint wohl nicht mit sSMTP zu funktionieren.
            Über Postfix solle das ganze wohl laut: https://forum.ubuntuusers.de/topic/postfix-mailversand-ueber-securesmtp-t-online-/ funktionieren. Vielleicht kannst ja mal eine Anleitung zu Postfix einrichtung machen.

            Grüße

          • Jan sagt:

            Hi,

            warum muss es eigentlich eine T-Online Adresse sein? Wäre die einfachste Lösung hier nicht einfach eine Mail-Adresse eines Freemail-Anbieters (Google, GMX, etc.) zu nehmen? Vielleicht mag es über Postfix gehen, aber ich würde mir nicht den Stress antun, einen vollwertigen MTA zu konfigurieren, wenn es auch einfacher gehen würde.

            Aber zu T-Online:
            In dem Thread, den du erwähnst, stellt ein User auch die Vermutung auf, dass sich T-Online hier nicht an den Standard hält. Das könnte hier vielleicht das Problem sein. Ebenso wird erwähnt, dass securesmtp.t-online.de nur ein CNAME-Eintrag für sfwdallmx.t-online.de ist. Hast du schonmal probiert, sfwdallmx.t-online.de in der /etc/ssmtp/ssmtp.conf als mailhub zu definieren? Vielleicht klappt es ja damit.

            Gruß,
            Jan

          • Murderhead sagt:

            Hey Jan,

            Ne ne muss natürlich nicht zwingend eine T-Online E-Mail Adresse sein. Werde dann einfach irgend ein anderen Freemail Anbieter nehmen.

            Klar habe ich das schon mit sfwdallmx.t-online.de versucht leider ebenfalls ohne erfolg.

            Wäre dennoch interessant zu wissen wie man einen vollwertigen MTA aufsetz. Vor allem da deine Anleitungen alle wirklich gut sind.

            Grüße

  • Stefan Müller sagt:

    Herzlichen Dank für die ausführlich kommentierten Tutorials! Es ist wirklich eine Freude, damit zu arbeiten; besonders bei so umfangreichen und komplexen Arbeiten wie „Nextcloud auf Ubuntu Server 18.04 LTS mit nginx, MariaDB, PHP, Let’s Encrypt, Redis und Fail2ban“.
    Beim Thema MTA schlage ich vor, nicht mehr sSMTP zu bernutzen, da es nicht mehr unterhalten wird (Quelle: https://wiki.archlinux.org/index.php/SSMTP). Stattdessen verwende ich msmtp, welches sich ebenfalls leicht einrichten lässt.
    Mit freundlichen Grüssen
    Stefan

  • Dirk sagt:

    Hi Jan, trotz Hitze wollte ich mal mit Deinen tollen Tut’s weiterarbeiten an meinem Projekt. Leider verhindert das diese Fehlermeldung beim einfachen Update:
    E: Sie haben nicht genug Platz in /var/cache/apt/archives/

    Der Befehl df -h bringt dieses Ergebis:

    Dateisystem Größe Benutzt Verf. Verw% Eingehängt auf
    /dev/root 7,2G 6,6G 239M 97% /
    devtmpfs 460M 0 460M 0% /dev
    tmpfs 464M 0 464M 0% /dev/shm
    tmpfs 464M 42M 423M 9% /run
    tmpfs 5,0M 4,0K 5,0M 1% /run/lock
    tmpfs 464M 0 464M 0% /sys/fs/cgroup
    /dev/mmcblk0p1 43M 22M 21M 52% /boot
    /dev/sda1 2,8T 152M 2,8T 1% /media/hdd
    tmpfs 93M 0 93M 0% /run/user/1000

    Weißt Du vielleicht, was da falsch läuft bzw. ich ändern muß?

    Liebe Grüße

    Dirk

    • Jan sagt:

      Hi Dirk,

      hier würde ich mal folgendes probieren:
      apt-get autoclean
      apt-get autoremove
      apt-get clean

      Damit sollte die Fehlermeldung eigentlich nicht mehr erscheinen.

      Gruß,
      Jan

      • Dirk sagt:

        Hallo Jan,
        danke für die Antwort. Das hatte ich auch schon probiert, aber leider ohne Erfolg. Die Meldung bleibt stadhaft. Oder muß ich einen Restart versuchen?
        LG Dirk

        • Jan sagt:

          Hi Dirk,

          eine andere Lösung des Problems ist mir leider auch nicht bekannt. Ich würde aber auf jeden Fall mal einen Neustart durchführen.
          Kannst du mit dieser Fehlermeldung nun gar keine Updates mehr durchführen?

          Gruß,
          Jan

          • Dirk sagt:

            Neustart hat nichts gebracht. Er macht keine Updates mehr, weil der Platz angeblich nicht ausreicht.

            Gruß Dirk

          • Jan sagt:

            Hi Dirk,

            könnte es daran liegen, dass /dev/root nahezu voll ist? Hier müsste ich nun auch raten, allerdings habe ich hier einen Hinweis gefunden, dass man die Partitionen evtl. vergrößern muss. Allerdings greifst du hier tief in das System rein, daher mit Vorsicht zu genießen und auf jeden Fall vorher ein Backup machen!

            Gruß,
            Jan

          • Dirk sagt:

            Hi Jan,
            dev/root gabe ich mal überprüft. Der Ordner /usr ist insg. 2,9 G groß, davon alleine /usr/lib 1,8 G. der Ordner /opt ist annähernd 1 G groß, und /var auch ca 600 MB.
            Warum ist das so, wenn nur nach Deiner Anleitung die Programme installiert wurden? Kann da was gelöscht werden? Die SD Karte ist ja nur 8GB groß.
            LG Dirk

          • Jan sagt:

            Hi Dirk,

            sind in den entsprechenden Verzeichnissen irgendwelche auffälligen Dateien?
            Leider verwende ich einen Pi nur zu Testzwecken, daher kann ich dir nicht sagen, welche „Platzansprüche“ der Raspi nach einiger Laufzeit hat.
            Den Pi ohne Neuinstallation auf eine größere SD-Karte umzuziehen wird vermutlich sehr aufwendig. Hier habe ich einen Link, vielleicht hilft der ja weiter.

            Gruß,
            Jan

          • Dirk sagt:

            Hi Jan,
            danke für den Link. Der hat mich schließlich auf die Spur der Speicherfresser gebracht. Alleine 700 MB für Wolfram und der Trashbin von NC nochmals einiges an GB. Nun läuft die Aktualisierung wieder!
            Tausend Dank nochmals…

            LG Dirk

Schreibe einen Kommentar

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