Einfaches Mail-Setup für Linux und PHP mit ssmtp

Bei fast jedem selbst aufgesetzten Server will man die Möglichkeit haben, Mails zu versenden. Mit diesem Setup beschreibe ich, wie Du das mit dem geringesten Aufwand bewerkstelligen kannst.

Vielleicht will man über SSH-Logins unterrichtet werden oder Fehlerzustände mitgeteilt bekommen. Oder Du hast eine Webanwendung mit PHP am Laufen und möchtest, dass Du mit der PHP-Mail-Funktion Mails versenden kannst. Dann ist dieses wirklich minimalistische Setup auf der Basis von ssmtp genau das Richtige für Dich. Vorteil: Du brauchst keinen ganzen Mailserver aufsetzen.

Im Vergleich mal hier die Pakete, die allein mit den Mailutils installiert werden, auch, wenn Du nur Mails an einen von Dir eh schon benutzten Mailserver weiterleiten willst:

guile-2.0-libs libgc1c2 libgsasl7 libkyotocabinet16v5 \
libltdl7 libmailutils4 libntlm0 libpython2.7 libpython2.7-minimal \
libpython2.7-stdlib libunistring0 mailutils-common postfix

Wenn Du noch kein Python auf dem Rechner hast, wir es vermulich noch mehr.

Installation

Das Paket ssmtp kann drei Dinge: Es kann Mails per SMTP an Deinen vorhandenen Mailserver senden, es stellt einen Ersatz für das Programm sendmail bereit und Du kannst für verschiedene Linux-User auf dem System definieren, wohin Mails geschickt werden sollen, wenn diese jeweils sendmail benutzen, also nutzerspezifisch.

So wird das Paket auf Arch, Manjaro bzw. Ubuntu installiert:

pacman -S ssmpt

oder

apt install ssmpt

Konfiguration

Die gesamte Konfiguration von Mailserver (für den Versand über SMTP), die User-Logins, Passwort, Mailadresse und so weiter wird hier in der Datei /etc/ssmtp/ssmtp.conf angegeben (Groß-Kleinschreibung ist egal):

root=empfaenger@domain.de
rewritedomain=domain.de
hostname=www.domain.de
authuser=emailuser@provider.net
authpass=mysecretpassword
mailhub=smtp.provider.net

Dabei haben die Zeilen folgende Bedeutung:

  • root - Der Empfänger aller System-Mails, die sonst lokal bleiben
  • rewritedomain - Username + Rewritedomain = Absender
  • hostname - Der Hostname unseres Servers inkl. Domain (fqdn)
  • authuser - Loginname bei Deinem Mailprovider, meistens Deine E-Mail-Adresse
  • authpass - Dein Passwort beim Mailprovider
  • mailhub - Der SMTP-Mailserver Deines Providers

Das war’s schon, jetzt kannst Du schon vom Linux aus eine Testmail senden. Mach mal eine Textdatei test.txt, die so aussieht (Leerzeile nach der Subject-Zeile ist wichtig):

Subject: Terminal Email Send

Dies ist ein test-Text Test!

Und nun kannst Du diesen als Main verschicken:

sendmail empfaenger@domain.de < test.txt

Wenn Du ein falsches Passwort angegeben hast oder sonst was schief läuft, kannst Du die Situation so analysieren:

tail /var/log/mail.log

PHP-Konfiguration

Wenn Du auf diesem Deinen Linux-Server PHP installiert hast, dann kannst Du die obige Konfiguration so einbinden: Suche die von Dir genutzte php.ini Datei, bei mir ist es /etc/php/7.3/apache2/php.ini und trage folgendes ein:

sendmail_path = /usr/sbin/sendmail
sendmail_from = username@domain.de

Den oberen Wert findest Du heraus, indem Du which sendmail eingibst, der untere Wert ist der Standard-Absender, wenn sonst nichts in Deinem PHP-Programm angegeben wird. Letzterer sollte den hinteren Domain-Teil so haben, wie deine rewritedomain ist. Beispiel: Wenn Du von Deinem Server aus sendest, dann heißt der ja z.B. www.domain.de oder chat.domain.de, wobei domain.de Deine Domain ist, die Du natürlich so setzen musst, wie sie eben heißt.

Absicherung

Die Datei /etc/ssmtp/ssmtp.conf muss so abgesichert sein, dass nur der root-User sie lesen und schreiben kann und der Mail-User lesen:

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

Das sieht mit ls -l dann so aus:

-rw-r----- 1 root mail 600 Apr 29 15:39 ssmtp.conf

User mit Mailversand

Das ssmtp nutzt für den Versand die User des Linux-Systems. Nun kann für jeden Linux-User festgelegt werden, als welcher User er beim Mailversand nach außen erscheint.

Beispiel: Alles, was vom User root versendet wird, soll an einen Admin-Mail-Account gehen, den Du extra dafür eingerichtet hast, also ein eigenes Postfach. Ebenso für den www-data-User - das ist alles, was vom webserver oder von Deinen Web-Anwendungen kommt, z.B. von PHP.

Dazu passen wir die Datei /etc/ssmtp/revaliases an:

# sSMTP aliases
# 
# Format:	local_account:outgoing_address:mailhub
#
# Example: root:your_login@your.domain:mailhub.your.domain[:port]
# where [:port] is an optional port number that defaults to 25.

root:admin@deinedomain.de:dein.mailserver.de
www-data:www@deinedomain.de:dein.mailserver.de

Usernamen im Mail

Jetzt klappt schon das Versenden, aber beim Empfänger der Mails soll ja nicht root oder www-data als Absender stehen, sondern vielleicht ein schönerer lesbarer Name, wie Administrator.

Das machen wir, indem wir in der Datei /etc/passwd in der fünften Spalte, getrennt durch Doppelpunkte, die lesbaren Namen anpassen, zum Beispiel von

root:x:0:0:root:/root:/bin/bash

nach

root:x:0:0:Administrator:/root:/bin/bash

Diese werden dann automatisch verwendet. Ebenso für den www-data User, wenn genutzt. Hier kann zum Beispiel der Name der Organisation gewählt werden oder der Name einer spezifischen Webanwendung, die Du eingerichtet hast, wie Forum.

Fazit

Man kann noch ein Paar Dinge mehr konfigurieren, aber das ist erstmal alles, was Du brauchst. Kein Bloat, keine tausend Abhängigkeiten, klein und schlank und genau das, was Du brauchst. Viel Spaß damit.