Skip to content

E-Mail-Versand ​

PHPs mail() funktioniert auf jeder PHP-Website, deren Domain ihre E-Mails bei uns hat. Eine solche Website bekommt eine eigene Adresse, die nur versendet, und mail() übergibt jede Nachricht unter dieser Adresse an unseren Mailserver. Du musst nichts einrichten: Alles, was über mail() versendet, nutzt sie, auch WordPress ohne SMTP-Plugin, Cronjobs und Befehle in der Konsole.

In der Übersicht der Website steht die Karte E-Mail-Versand aus PHP. Sie zeigt die Adresse und die geltenden Limits, oder den Grund, warum die Website keinen Absender hat.

Wann eine Website einen Absender bekommt ​

Die Domain der Website muss alles hiervon erfüllen:

  • Sie gehört zu deinem Konto.
  • E-Mail ist für sie eingeschaltet, und die Domain ist verifiziert.
  • Ihre MX-Einträge zeigen auf uns.
  • Ihr SPF- oder DKIM-Eintrag ist gesetzt.

Eine Website auf einer Subdomain nutzt die Domain, zu der sie gehört, also qualifiziert sich shop.example.com über example.com. Statische Websites führen kein PHP aus und bekommen keinen Absender.

Eine neue Website bekommt ihren Absender innerhalb von 10 Minuten. Wenn du DNS oder E-Mail-Einstellungen einer Domain änderst, kann es bis zu einer Stunde dauern, bis die Website nachzieht.

Wenn die Karte statt einer Adresse einen Grund nennt:

Die Karte sagtWas du tun kannst
Die E-Mails liegen bei einem anderen AnbieterSiehe E-Mail bei einem anderen Anbieter
E-Mail ist ausgeschaltet oder nicht enthaltenSchalte E-Mail unter E-Mail → Domain-Einstellungen ein. Liegen ihre E-Mails bei einem anderen Anbieter, siehe E-Mail bei einem anderen Anbieter
Die Domain ist für E-Mail noch nicht verifiziertVerifiziere die Domain unter E-Mail → DNS & Einrichtung
Der SPF- oder DKIM-Eintrag fehltLege die Einträge unter E-Mail → DNS & Einrichtung an
Füge eine eigene Domain hinzuDie Website hat nur einen Plattform-Hostnamen. Füge ihr eine Domain hinzu
Die Website ist gestopptEine gestoppte Website hat keinen Absender. Sie bekommt wieder einen, sobald sie weiterläuft

Die Adresse ​

Hostname der WebsiteAbsenderadresse
example.com oder www.example.comwebsite@example.com
shop.example.comwebsite-shop@example.com

Ist diese Adresse schon vergeben, kommt eine Zahl dazu, etwa website-2@example.com.

Die Adresse versendet nur:

  • Sie empfängt nichts. E-Mails an sie werden abgelehnt, Antworten und Unzustellbarkeitsnachrichten an sie gehen also verloren. Trag die Adresse, die Antworten bekommen soll, in Reply-To ein.
  • Sie kann keine E-Mails lesen. Das Portal zeigt ihr Passwort nicht an, und sie kann sich weder per IMAP noch per POP3 anmelden.
  • Der Name ist reserviert. Auf keiner Domain lässt sich ein Postfach oder Alias anlegen, dessen Name mit website beginnt.

Die From-Adresse ​

Jede Adresse in From, und in Sender oder Resent-From, falls dein Code sie setzt, muss auf der Domain der Absenderadresse der Website oder einer Subdomain davon liegen. Setzt dein Code kein From, wird die Adresse der Website verwendet. Alles andere wird abgelehnt:

text
550 5.7.1 From address not permitted for this sender

Meistens betrifft das Kontaktformulare. Die Adresse des Besuchers gehört in Reply-To, damit eine Antwort auf die Nachricht trotzdem bei ihm ankommt:

php
mail('info@example.com', 'Kontaktformular', $body, [
    'From' => 'website@example.com',
    'Reply-To' => 'besucher@example.org',
]);

Limits ​

Jede Website hat ihr eigenes Limit, gezählt in Empfängern: Eine Nachricht an drei Personen zählt drei.

ZeitraumEmpfänger
Pro Stunde200
Pro Tag1.000

In den ersten 30 Tagen nach der Registrierung deines Kundenkontos gilt stattdessen das strengere Versandlimit für neue Konten: 30 Empfänger pro Stunde und 100 pro Tag. Eine abgelehnte Nachricht zählt nicht. Braucht eine Website ein höheres Limit, melde dich beim Support.

Was auf diesem Weg versendet wird, zählt außerdem zu den monatlichen ausgehenden Nachrichten der Domain, genau wie E-Mails aus einem Postfach. Siehe E-Mail.

Nichts landet in einer Warteschlange ​

Lehnt der Server eine Nachricht ab, wegen der From-Regel, eines Limits oder eines vorübergehenden Problems bei uns, gibt mail() false zurück und die Nachricht ist weg. Nichts versucht es erneut, prüf also den Rückgabewert.

Die Antwort des Servers steht in den Logs der Website, unter Fehler-Logs:

text
msmtp: server message: 452 4.7.1 Rate limit exceeded

Bei E-Mails aus einem Cronjob steht sie stattdessen in der Ausgabe dieses Laufs: Cron, dann Läufe, dann Ausgabe.

Zum Testen führst du das hier in der Konsole aus, mit deiner eigenen Adresse:

sh
php -r 'var_dump(mail("du@example.com", "Test", "Testnachricht"));'

bool(true) heißt, der Server hat die Nachricht angenommen. Bei bool(false) steht der Grund in der Ausgabe der Konsole.

E-Mail bei einem anderen Anbieter ​

Zeigen die MX-Einträge der Domain zu einem anderen Anbieter, etwa Microsoft 365 oder Google Workspace, bekommt die Website keinen Absender. Unser Server versendet nicht für eine Domain, deren E-Mails woanders liegen. Eine Domain ganz ohne MX-Einträge zählt genauso. Sollen ihre E-Mails bei uns liegen, lege die Einträge unter E-Mail → DNS & Einrichtung an.

Versende stattdessen über deinen Anbieter, mit einem SMTP-Plugin oder der SMTP-Einstellung deines Frameworks, mit dem Server deines Anbieters, Port 587 oder 465 und einem Postfach-Login dort. In WordPress übernimmt ein SMTP-Plugin auch wp_mail().

Weiter ​