Tutorial: E-Mails mit eigenem Server versenden per SMTP – Ubuntu 18.04
Leider ist das Versenden von E-Mails vom eigenem Server aus in Zeiten von Spam nicht einfach. Möchte man einen eigenen SMTP-Server betreiben, müsste man recht viele Anti-Spam-Maßnahmen implementieren um zu gewährleisten, dass eure Emails auch beim Empfänger ankommen. Dieser Aufwand ist aber oftmals viel zu hoch.
Daher empfehle ich externe SMTP-Server für den E-Mail-Versand zu nutzen. Die Einrichtung ist einfach und, sofern ihr einen vertrauenswürdigen Anbieter wie z.B. Gmail nutzt, habt ihr keine Probleme mit Spam.
In diesem Tutorial erkläre ich, wie ihr Ubuntu 18.04 (Bionic Beaver) so konfiguriert, dass vom Server aus E-Mails über einen externen SMTP-Server (z.B. von Gmail) versendet werden kann. Bei anderen Ubuntu und Linux-Versionen verläuft die Konfiguration analog.
Anschließend zeige noch, wie ihr PHP konfigurieren könnt, damit E-Mails die per mail()-Befehl gesendet werden über den SMTP-Server versendet werden kann.
Inhaltsverzeichnis
Schritt 1 – Externer SMTP-Server (z.B. Gmail)
Es empfiehlt sich E-Mails über externe (vertrauenswürdige) SMTP-Server zu senden, da ansonsten die E-mails von eurem Server oft im Spamfilter landen. Bei den meisten Webhosting-Tarifen werden Postfächer mit angeboten und ihr könnt den SMTP-Server von eurem Postfach nutzen.
Damit euer Server die E-Mails über diesen SMTP-Server versendet, braucht ihr folgende Infos:
- Serveradresse (des SMTP-Servers)
- Benutzername
- Passwort
Diese Infos bekommt ihr i.d.R. vom Anbieter des E-Mail-Postfaches.
Alternativ kann man auch kostenlos ein Konto bei Gmail registrieren.
GMail – Weniger sichere Apps zulassen
Der Versand per GMail klappt nur, wenn ihr in eurem Konto die Einstellung Weniger sichere Apps zulassen aktiviert. Aktiviert man diese Einstellung, dann können externe Anwendungen (sprich, euer Server) per Benutzername und Passwort über euer GMail-Konto E-Mail versenden.
Wenn ihr diese Einstellung nicht aktiviert, dann erhaltet die Fehlermeldung:
1 2 3 4 5 6 |
msmtp: authentication failed (method LOGIN) ... msmtp: server message: 534-5.7.14 your web browser and then try again. msmtp: server message: 534-5.7.14 Learn more at msmtp: server message: 534 5.7.14 https://support.google.com/mail/answer/78754 z4-v6sm17243464wrt.13 - gsmtp msmtp: could not send mail (account default from /etc/msmtprc) |
Wie ihr die Einstellung weniger sichere Apps zulassen bearbeiten könnt ist hier beschrieben: Weniger sicheren Apps den Zugriff auf Ihr Konto gestatten
Schritt 2 – MSMTP installieren
Wir nutzen das msmtp Package, welches es erlaubt das unter Ubuntu z.B. per Kommandozeile oder per PHP-Anwendung E-Mails über einen externen SMTP-Server versendet werden kann. Die Installation erfolgt wie folgt:
1 2 |
sudo apt update sudo apt install -y msmtp msmtp-mta |
Schritt 3 – MSMTP konfigurieren
Um MSMTP zu konfigurieren, muss die Datei /etc/msmtprc bearbeitet werden:
1 |
sudo nano /etc/msmtprc |
Diese befüllen wir mit folgenden Informationen (GMail als Beispiel):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# Set defaults. defaults # Enable or disable TLS/SSL encryption. tls on tls_starttls on tls_trust_file /etc/ssl/certs/ca-certificates.crt # Setup GMail to send emails via SMTP account gmail host smtp.gmail.com port 587 auth login user GMAILACCOUNT from GMAILACCOUNT@gmail.com password GMAILPASSWORD # Set a default account account default : gmail |
Dabei muss user euer SMTP-Benutzerkonto sein, from die Absendeadresse und password euer SMTP-Passwort.
Schritt 4 – E-Mail Versand testen
Mit folgendem Befehl könnt ihr die richtige Konfiguration von msmtp testen. Sofern alles geklappt hat, sollte [email protected] eine E-Mail erhalten:
1 |
echo "Test Nachricht von meinem Server" | msmtp test@email.de |
Schritt 5 – PHP für den E-Mail-Versand konfigurieren
MSMTP lässt sich verwenden, damit PHP-Anwendungen wie z.B. WordPress mittels dem PHP-Mail-Befehl E-Mails versenden kann. Hierzu müsst ihr die php.ini-Datei anpassen.
Den Pfad der php.ini-Datei lässt sich aus der phpinfo.php Datei entnehmen. Wenn ihr dem Artikel Tutorial: Apache, MySQL, PHP (LAMP) auf Ubuntu 18.04 installieren gefolgt seid und PHP-fpm installiert habt, könnt ihr die php.ini-Datei wie folgt bearbeiten (7.2 ggf. durch eure PHP-Version austauschen):
1 |
sudo nano /etc/php/7.2/fpm/php.ini |
Sucht in dieser Datei nach sendmail_path und passt diesen Abschnitt wie folgt an:
1 2 3 4 5 6 7 8 9 10 |
[mail function] ; For Win32 only. ;SMTP = localhost #Diese Zeile auskommentieren ;smtp_port = 25 #Diese Zeile auskommentieren ; For Win32 only. ;sendmail_from = me@example.com ; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). sendmail_path = "/usr/bin/msmtp -t" #Diese Zeile wie folgt setzen |
Kommentiert die Einstellungen SMTP und smtp_port aus, indem ihr ein ; an den Satzanfang stellt.
Danach müsst ihr sendmail_path auf /usr/bin/msmtp -tsetzen.
Zum Anschluss muss PHP neu gestartet werden:
1 |
sudo systemctl restart php7.2-fpm |
Falls PHP nicht als fpm läuft, sondern als Apache-Modul, muss der Apache-Server neu gestartet werden:
1 |
sudo systemctl restart apache2 |
Kontrolliert anschließend in der phpinfo.php-Datei ob die Einstellung sendmail_path korrekt auf /usr/bin/msmtp -t verweist: