PHP mail() aktivieren ohne Mailserver zu betreiben

Jeder gute Linux-Server hat einen eigenen Mailserver. Außer, man ist die Konfiguration leid. Als Admin möchte man nicht freiwillig Ports öffnen, über Verschlüsselung nachdenken und umfangreiche Tests durchführen, wenn die Maschine sowieso nie eine Mail über SMTP bekommt.

Handelt es sich um einen Webserver, werden darüber schon mal Mails verschickt. Hier ein Passwort, da eine Benachrichtigung. Um das zu ermöglichen, kann man in jede Webseite einen SMTP-Client einbauen, der sich mit Google Mail oder irgend einem anderen externen Server verbindet und ihm die Post zum Versand gibt. Das ist bei den meisten Foren und Blogs überhaupt kein Problem.

In PHP5 gibt es allerdings eigentlich einen Befehl mail(), der Mails annimmt und sich selbständig um den Versand kümmert. Diese Schnittstelle zu verwenden erscheint mir ordentlicher als immer SMTP-Clients zu verbauen.

Installation

Erst einmal (unter Ubuntu 15.10) einen wirklich kleinen Sendmail-Ersatz installieren. msmtp tut nichts anderes als Mails über einen Shell-Aufruf so anzunehmen, wie es früher Sendmail getan hat, und sie per SMTP weiterzugeben.

sudo apt-get install msmtp

Konfiguration

In der /etc/php5/apache2/php.ini gibt es eine Sektion [mail function]. Dort werden die folgendenden beiden Direktiven ausgeüllt:

sendmail_path = "/usr/bin/msmtp --logfile /var/log/msmtp.log -a gmail -t > /var/log/msmtp2.log 2>&1"

mail.log = /var/log/php-mail.log

Um die Fehlerbehebung zu erleichtern, habe ich drei Log-Dateien vorgesehen. Zusätzlich werden Fehler in der allgemeinen error.log von Apache2 protokolliert. Bei Problemen sollte in allen vier Dateien nach Hinweisen gesucht werden. Die neuen Dateien werden für den Webserver beschreibbar gemacht:

sudo touch /var/log/msmtp.log
sudo touch /var/log/msmtp2.log
sudo chmod a+w /var/log/msmtp.log
sudo chmod a+w /var/log/msmtp2.log

Der Sendmail-Befehl oben verwendet den Parameter -a gmail. Damit wird der Account gmail verwendet. Einzustellen ist er in einer Datei /etc/msmtprc.

account gmail
tls on
tls_certcheck off
auth on
host smtp.gmail.com
port 587
user formmail@netaction.de
from formmail@netaction.de
password 12345abcde

Test

Das war es schon. Nochmal schnell ausprobieren und dann PHP mail() verwenden.

echo -e "Subject: Test Mail\r\n\r\nThis is a test mail" |msmtp --debug -a gmail -t schmidt@netaction.de

Newsletter

Ich bin mir nicht sicher, ob der msmtp für Newsletter geeignet ist. Wahrscheinlich nicht.

1 thought on “PHP mail() aktivieren ohne Mailserver zu betreiben”

Leave a Comment