SMTP für Laravel — die Post Ihrer Anwendung, die ankommt
Laravel bringt eine vollständige Mail-Schicht mit, mit Warteschlangen, Vorlagen und Benachrichtigungen. Was es nicht liefert, ist die Zustellbarkeit: Die hängt vom Server ab, über den Sie senden, und die Standardkonfiguration eines neuen Servers ist selten ein guter Absender.
Laravel liest seine Mail-Einstellungen aus der Umgebungskonfiguration. Dort ändern Sie die SMTP-Daten, und der Rest Ihrer Anwendung bleibt unverändert — keine Anpassung an Mailables, Notifications oder Warteschlangen nötig.
Warum es ohne Relay schiefgeht
Eine Anwendung in der Entwicklung sendet an eine Testadresse und alles scheint in Ordnung. Beim Go-live ändert sich das Publikum: echte Adressen bei echten Anbietern, die Authentifizierung und Reputation sehr wohl prüfen. Das ist der Moment, in dem die E-Mails zum Zurücksetzen plötzlich nicht mehr ankommen — nur bei einem Teil der Benutzer, was das Problem schwer zu erkennen macht.
SMTP in Laravel einrichten
Zugangsdaten abrufen
Melden Sie sich in Ihrem 2mail-Konto an und rufen Sie dort Ihren SMTP-Server, Benutzernamen und Ihr Passwort ab.
In Laravel eintragen
Die Mail-Einstellungen liegen in der Umgebungsdatei Ihrer Anwendung, nicht im Code. Sie stellen den Mailer auf SMTP und tragen die fünf Daten unten ein. Vergessen Sie Adresse und Name des Absenders nicht: Das sind eigene Einstellungen, neben den Verbindungsdaten.
Domain authentifizieren
Sorgen Sie dafür, dass SPF, DKIM und DMARC für Ihre Domain korrekt gesetzt sind, damit Empfänger verifizieren können, dass die Mail von Ihnen stammt.
Testen
Senden Sie von Ihrer Plattform aus eine Testnachricht an eine Adresse bei einem großen Provider und prüfen Sie, ob sie im Posteingang ankommt und nicht im Spam-Ordner.
Die Felder, die Laravel abfragt
Jede Plattform nennt sie etwas anders, aber es geht immer um dieselben fünf. Die konkreten Werte sind kontogebunden und finden Sie in Ihrem 2mail-Konto — rufen Sie sie dort ab, damit Sie sicher die richtigen verwenden.
| Feld | Was Sie eintragen |
|---|---|
| SMTP-Server (Host) | Der Servername aus Ihrem 2mail-Konto. |
| Port | Der Port, der zu Ihrer gewählten Verschlüsselung gehört; Ihr Konto zeigt, welcher. |
| Verschlüsselung | TLS. Senden Sie nie unverschlüsselt — sonst gehen Ihre Zugangsdaten lesbar über die Leitung. |
| Benutzername | Der SMTP-Login Ihres 2mail-Kontos. |
| Passwort | Das zugehörige Passwort. Verwenden Sie nie das Passwort eines Mitarbeiterpostfachs. |
SMTP-Konfiguration für Laravel im Code
Funktionierende Beispiele für Port 587 mit STARTTLS, direkt zum Übernehmen. Ersetzen Sie die Absenderadresse durch eine Adresse auf Ihrer eigenen Domain und prüfen Sie Servername und Login in Ihrem 2mail-Konto. Das Passwort gehört in eine Umgebungsvariable — nie in den Code und nie in die Versionsverwaltung.
Die .env-Datei: die MAIL_*-Variablen
Laravel liest alle Verbindungsdaten aus .env. Port 587 arbeitet mit STARTTLS: Die Verbindung beginnt unverschlüsselt und wird auf TLS hochgestuft, noch bevor Ihre Zugangsdaten über die Leitung gehen. Das Passwort steht ausschließlich in der .env-Datei auf dem Server — diese Datei gehört nicht in die Versionsverwaltung. Ersetzen Sie example.com durch eine Domain, die Sie in 2mail authentifiziert haben.
MAIL_MAILER=smtp
MAIL_HOST=relay.2mail.eu
MAIL_PORT=587
MAIL_USERNAME="<2mail-smtp-login>"
MAIL_PASSWORD="<2mail-smtp-password>"
MAIL_FROM_ADDRESS="noreply@example.com"
MAIL_FROM_NAME="${APP_NAME}"
# Only when config/mail.php still has an 'encryption' key (older projects):
MAIL_ENCRYPTION=tls
# When config/mail.php has a 'scheme' key instead: leave MAIL_SCHEME unset.
# "smtp" on port 587 upgrades to STARTTLS by itself; "tls" is not a valid scheme. config/mail.php: der smtp-Mailer
In einem Standardprojekt müssen Sie hier nichts ändern: Die Datei liest einfach die Variablen aus .env. Sehen Sie aber nach, wenn eine Einstellung wirkungslos bleibt — ein fest eingetragener Host in dieser Datei hat immer Vorrang vor Ihrer .env. Neuere Projekte haben einen Schlüssel scheme, ältere einen Schlüssel encryption; der Rest ist identisch.
// config/mail.php
'default' => env('MAIL_MAILER', 'smtp'),
'mailers' => [
'smtp' => [
'transport' => 'smtp',
'scheme' => env('MAIL_SCHEME'), // newer projects
// 'encryption' => env('MAIL_ENCRYPTION', 'tls'), // older projects use this key instead
'host' => env('MAIL_HOST', 'relay.2mail.eu'),
'port' => env('MAIL_PORT', 587),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'timeout' => null,
],
],
'from' => [
'address' => env('MAIL_FROM_ADDRESS', 'noreply@example.com'),
'name' => env('MAIL_FROM_NAME', 'Example'),
], Test-E-Mail mit Tinker senden
Leeren Sie zuerst den Konfigurations-Cache, sonst testen Sie noch die alten Einstellungen. Mail::raw sendet synchron: Einen Fehler bei Host, Port oder Zugangsdaten sehen Sie sofort im Terminal und nicht erst im Log der Warteschlange. Senden Sie an eine externe Adresse bei einem großen Anbieter.
php artisan config:clear
php artisan tinker
# At the tinker prompt:
Mail::raw('Sent through the 2mail SMTP relay.', fn ($m) => $m->to('you@example.org')->subject('SMTP test')); Welche Mails Laravel sendet
Sobald das Relay eingerichtet ist, laufen diese alle über 2mail — Sie müssen sie nicht einzeln konfigurieren.
Stolperfallen bei Laravel
Die Warteschlange muss laufen
Wenn Sie Post in die Warteschlange stellen, ohne dass ein Worker aktiv ist, geht nichts ab und Sie sehen keinen Fehler. Bei Zustellproblemen sollte das die erste Prüfung sein, nicht die letzte.
Der Konfigurations-Cache nach einer Änderung
Wenn Ihre Anwendung mit gecachter Konfiguration läuft, bleiben geänderte Mail-Einstellungen wirkungslos, bis dieser Cache erneuert wird. Eine Einstellung, die „nicht funktioniert“, ist oft schlicht noch nicht neu eingelesen.
Testumgebungen, die wirklich versenden
Eine Staging-Umgebung mit einer Kopie der Produktionsdatenbank kann unbemerkt an echte Kunden senden. Beschränken Sie dort die Empfänger ausdrücklich, oder verwenden Sie eigene Zugangsdaten.
Häufige Fehlermeldungen bei Laravel
Die Meldungen, die Sie sehen, wenn Host, Port, Verschlüsselung oder Login nicht stimmen — im Wortlaut, damit Sie sie in Ihrem Log wiedererkennen, mit Ursache und Lösung daneben.
| Meldung | Ursache | Lösung |
|---|---|---|
Connection could not be established with host "relay.2mail.eu:587": stream_socket_client(): Unable to connect to relay.2mail.eu:587 (Connection timed out) | Ihr Server erreicht das Relay nicht. Meist blockiert die Firewall Ihres Hosters ausgehenden Verkehr auf Port 587, oder in MAIL_HOST oder MAIL_PORT steckt ein Tippfehler. | Testen Sie vom selben Server aus mit openssl s_client -starttls smtp -connect relay.2mail.eu:587. Kommt keine Antwort, lassen Sie Ihren Hoster ausgehenden Verkehr auf Port 587 freigeben. |
Connection could not be established with host "ssl://relay.2mail.eu:587": stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages: error:…:SSL routines::wrong version number | Das Scheme steht auf smtps (oder in einem älteren Projekt MAIL_ENCRYPTION=ssl). Laravel erwartet dann TLS ab dem ersten Byte, während Port 587 unverschlüsselt beginnt und erst danach über STARTTLS hochstuft. | Lassen Sie MAIL_SCHEME leer oder setzen Sie es auf smtp; in einem älteren Projekt setzen Sie MAIL_ENCRYPTION=tls. Der Port bleibt 587. |
Failed to authenticate on SMTP server with username "…" using the following authenticators: "LOGIN", "PLAIN". … Expected response code "235" but got code "535" | Das Relay lehnt die Anmeldung ab: ein falscher Benutzername oder ein falsches Passwort, ein Passwort mit Leerzeichen oder #, das in .env nicht in Anführungszeichen steht, oder eine alte Konfiguration im Cache. | Setzen Sie den Wert in doppelte Anführungszeichen, führen Sie php artisan config:clear aus und verwenden Sie den SMTP-Login aus Ihrem 2mail-Konto — nicht das Passwort eines Postfachs. |
The "tls" scheme is not supported; supported schemes for mailer "smtp" are: "smtp", "smtps". | In MAIL_SCHEME steht tls. Diese Variable ist kein Nachfolger von MAIL_ENCRYPTION: Sie kennt nur smtp und smtps. | Entfernen Sie MAIL_SCHEME oder setzen Sie es auf smtp. Auf Port 587 wechselt der Mailer von selbst zu STARTTLS. |
Expected response code "250/251/252" but got code "554", with message "554 5.7.1 <noreply@example.com>: Sender address rejected" | Die Anmeldung stimmt, aber die Absenderadresse liegt auf einer Domain, die nicht mit Ihrem 2mail-Konto verknüpft ist. Oft enthält MAIL_FROM_ADDRESS noch den Standardwert aus der Beispieldatei. | Setzen Sie MAIL_FROM_ADDRESS auf eine Adresse einer Domain, die Sie in 2mail hinzugefügt haben, und prüfen Sie, dass kein Mailable ein eigenes from() auf einer anderen Domain setzt. |
Andere Plattform?
SMTP ist ein Standardprotokoll: Jedes System, das SMTP spricht — ein CRM, ein ERP, eine eigene Anwendung oder ein Server —, kann über 2mail mit denselben fünf Feldern senden.