Fehler beim E-Mail-Versand beheben
- 4.4
- 4.9
- 4.13
- 5.3
- 5.7
Häufigstes Problem – Fehlende SMTP-Konfiguration
Wenn keine Mails versendet werden, beispielsweise nach dem Senden eines Formulars, dann liegt es meist daran, dass keine SMTP-Konfiguration eingerichtet wurde.
Du findest dann eine ähnliche Fehlermeldung wie diese in den Logfiles (/var/logs)
request.CRITICAL: Uncaught PHP Exception Swift_TransportException:
"Expected response code 220 but got an empty response …
Der technische Hintergrund
Vor einiger Zeit hat Swiftmailer die Unterstützung für die PHP-Mail-Funktion aus Sicherheitsgründen eingestellt und zwingt Anwender damit, zwischen den Konfigurationen sendmail und smtp zu wählen (Details). Ohne die Angabe eines SMTP-Servers werden die Daten standardmäßig über das Programm sendmail versendet. Je nach Konfiguration des Servers kann dies funktionieren, muss es aber nicht.
Weiteres Problem: Einstufung als nicht vertrauenswürdig und Spam
Es können zudem weitere Schwierigkeiten auftreten. Trotz des erfolgreichen Versands der Mails von Contao werden diese nicht beim Empfänger zugestellt. Denn ohne SMTP-Konfiguration werden die Mails nicht von einem autorisierten Postfach aus verschickt. Solche Mails werden häufig als nicht vertrauenswürdig eingestuft, was dazu führen kann, dass sie den Empfänger gar nicht erreichen oder im Spam-Ordner landen. Ebenso haben viele Mailanbieter ihre Sicherheitsrichtlinien verschärft, Stichwort SPF, DKIM und DMARC. Mehr dazu auch im Beitrag: Änderungen in den E-Mail-Richtlinien von Gmail und Yahoo
Unsere Empfehlung:
Stelle den Mailversand immer auf ein autorisiertes SMTP-Postfach um.
SMTP-Mail-Versand unter Contao einrichten
Seit Contao 4 können die SMTP-Einstellungen nicht mehr direkt im Backend konfiguriert werden, sondern werden durch die Anpassung der parameters.yaml oder .env.local konfiguriert.
Welche Datei du dabei nutzt, ist dir überlassen. Wobei ab Contao 5 der Weg über die .env.local empfohlen wird.
Eigene Zugangsdaten für den Mailserver bzw. das E-Mail-Postfach
Für den Mailversand über SMTP benötigst du eine gültige Mailadresse, die dem Mailserver bekannt ist. In der Regel sind das alle E-Mail-Adressen, welche bei deinem Provider zu der entsprechenden Domain registriert sind.
Am besten ist es allerdings, wenn du ein neues E-Mail-Postfach nur für Contao bei deinem Hoster erstellst. Dieses könnte beispielsweise smtp@example.com oder website@example.com lauten. Damit Antworten an diese E-Mail nicht verloren gehen, solltest du zusätzlich eine Regel anlegen, die alle Mails in Kopie an einen Sachbearbeiter weiterleitet.
Für dein E-Mail-Postfach (Mailadresse) hast du u. a. folgende Daten bekommen oder kannst diese erfragen:
- Hostnamen des SMTP-Servers
- Benutzernamen für dein E-Mail-Postfach (häufig die Mailadresse)
- Passwort für deine Mailadresse
- Portnummer des SMTP-Servers
für verschlüsselten E-Mailversand in der Regel Port 587 oder 465 - Verschlüsselungsmethode für den SMTP-Server
möglich sind die Werte tls oder ssl
Diese Daten müssen nun in die parameters.yml oder .env.local eingetragen werden.
Wo befindet sich die parameters.yml?
Die parameters.yml findest du im Ordner /config (ab Contao 4.8) bzw. im Ordner /app/config (bis Contao 4.7).
Diese Datei wurde bei der Installation vom Contao-Installtool automatisch erstellt und enthält bereits die Konfiguration der Datenbank. Wenn du eine neuere Installation hast, kann es sein, dass du keine Datei parameters.yml findest. In diesem Fall halte dich bitte an die Anleitung im Bereich .env.local.
Dateiendung yml oder yaml?
Grundsätzlich sind die Dateiendungen identisch. Das bedeutet, dass sowohl die Endung .yml als auch .yaml in Contao funktionieren.
parameters.yml nach der Installation von Contao
# This file has been auto-generated during installation
parameters:
database_host: HOSTNAME
database_port: PORT
database_user: DBUSER
database_password: DBPASSWORT
database_name: DBNAME
secret: DEINSECRET
Konfigurationsdatei ergänzen
Zum Bearbeiten der Datei benötigst du FTP-Zugriff und einen geeigneten Editor (z. B. Visual Studio Code, PhpStrom, …)
Nun ergänzt du die bestehende Datei. Ersetze dabei die Beispieldaten durch deine eigenen Daten.
parameters:
#Folgende Parameter nach secret hinzufügen
mailer_transport: smtp
mailer_host: host.example.com
mailer_user: email@example.com or accountID
mailer_password: 'dein-passwort'
mailer_port: 465 or 587
mailer_encryption: ssl or tls
Wichtiger Hinweis:
In der parameters.yml dürfen keine Tabulatoren für Einrückungen verwendet werden, sondern alle Einrückungen müssen Leerzeichen sein, so wie im Beispiel dargestellt.
Anwendungscache leeren
Damit die neue Konfiguration in Contao aktiv wird, musst du jetzt per Contao Manager den Anwendungs-Cache neu aufbauen. (Systemwartung > Prod.-Cache erneuern)
Wo befindet sich die .env.local?
Die .env.local findest du direkt im Root-Ordner von Contao, auf gleicher Ebene wie die composer.json.
Diese Datei wurde bei der Installation vom Contao-Manager automatisch erstellt und enthält bereits die Konfiguration der Datenbank. Wenn du eine ältere Installation hast, kann es sein, dass du keine Datei .env.local findest. In diesem Fall halte dich bitte an die Anleitung im Bereich parameters.yml.
Sollten beide Dateien vorhanden sein, dann liest Contao die Konfiguration aus der .env.local.
.env.local nach einer Installation von Contao
APP_SECRET=randomvalue
DATABASE_URL=mysql://username:password@localhost:3306/database
Mailer-DSN ergänzen
Zum Bearbeiten der Datei benötigst du FTP-Zugriff und einen geeigneten Editor (z. B. Visual Studio Code, PhpStrom, WebStorm, …). Evtl. musst du versteckte Dateien zulassen, damit die Datei sichtbar wird.
Nun ergänzt du die bestehende Datei .env.local. Ersetze dabei die Beispieldaten durch deine eigenen Daten.
MAILER_DSN=smtp://username:password@smtp.example.com:465?encryption=ssl
Um dir die Arbeit zu erleichtern, steht im Contao Handbuch ein Generator zur Verfügung. Dieser berücksichtigt auch die korrekte Konvertierung von Sonderzeichen.
Wichtiger Hinweise:
Es muss zwingend eine .env existieren, damit die .env.local funktioniert. Zudem müssen Sonderzeichen im MAILER_DSN encodiert werden.
Anwendungscache leeren
Damit die neue Konfiguration in Contao aktiv wird, musst du jetzt per Contao Manager den Anwendungs-Cache neu aufbauen. (Systemwartung > Prod.-Cache erneuern)
Sonderfall Microsoft Office 365
Die Anbindung von Office 365 ist leider nicht ganz einfach, was an den Sicherheitsrichtlinien von Microsoft liegt. In vielen Fällen ist der Versand über ein SMTP-Postfach aufgrund entsprechender Richtlinien nicht mehr möglich – insbesondere bei neueren Microsoft-Konten.
Der von Microsoft empfohlene Weg ist der Zugang über Microsoft Graph API Mailer. Alternativ geht auch noch die Einrichtung eines SMTP-Relays. Dabei erfolgt die Authentifizierung nicht mehr über Benutzername und Passwort, sondern anhand der IP-Adresse des Webservers und des MX-Endpunkts.
Eine vollständige Schritt-für-Schritt-Anleitung kann ich derzeit leider nicht bereitstellen, doch im Wesentlichen sind folgende Schritte notwendig:
- Einen zusätzlichen Relay-Connector in Microsoft 365 erstellen, der den Versand anhand der IP-Adresse überprüft.
- Den Versand ohne Benutzername und Passwort über den korrekten Server und Port 25 konfigurieren.
- Den SPF-Eintrag ergänzen.
Eine entsprechende Anleitung findest du hier bei Mcrosoft:
Konfigurieren eines AUF IP-Adressen basierenden Connectors für SMTP-Relay
In der Anleitung von Microsoft findest du auch die entsprechenden Links, wo die Konfiguration vorgenommen wird.
Wenn der Connector korrekt eingerichtet wurde, fügst du in der .env.local bzw. entsprechend passend in der parameters.yaml folgende Zeile ein:
MAILER_DSN=smtp://xxx.mail.protection.outlook.com:25
Die xxx ersetzt du durch deinen spezifischen Domainnamen (z. B. example-com), wie im Hilfeartikel beschrieben. Es werden keine Zugangsdaten hinterlegt, und der Versand erfolgt über Port 25.
Versand zwingend über IPv4!
Der Connector unterstützt ausschließlich eine IP-basierte Authentifizierung über IPv4, nicht jedoch über IPv6. Sendet der Server die Anfrage über IPv6, wird diese daher grundsätzlich abgewiesen. Auch in Microsoft 365 können derzeit nur IPv4-Adressen in einem STMP-Connector hinterlegt werden.
Ab Symfony 7.1, welches in Contao 5.6+ verwendet wird, kann der Versand über eine bestimmte Quell-IP erzwungen werden. Dafür steht der Parameter ?source_ip= zur Verfügung.
Ein entsprechender Eintrag kann wie folgt aussehen:
MAILER_DSN=smtp://domain-de.mail.protection.outlook.com:25?source_ip=xxx.xxx.xxx.xxx
Domainfactory und Office 365
Offenbar hat DomainFactory intern bereits eine eigene Lösung umgesetzt. Der einfachste Weg besteht darin, vollständig auf die Einrichtung eines SMTP-Servers zu verzichten und in Contao lediglich eine passende Absenderadresse zu hinterlegen. In diesem Fall versendet der Server die E-Mails direkt. (Getestet mit Contao 4.13 und 5.3.) Die nötigen SPF-Einträge waren ebenfalls vorhanden, sodass die Mails zuverlässig am Ziel-Postfach ankamen.
Mailversand testen
Leider gibt es keine grafische Oberfläche, um die korrekte Konfiguration mit einem Klick zu testen. Am besten testest du den Versand, indem du dein Formular erneut ausfüllst und prüfst, ob die Mails korrekt in deinem Postfach ankommen.
Alternativ kannst du auch die Kommandozeile verwenden.
# Contao 4.9
php vendor/bin/contao-console swiftmailer:email:send --from=sender@example.com --to=recipient@example.com --subject=testmail --body=testmail
# Contao 4.13 - benötigt Paket inspiredminds/contao-mailer-command
php vendor/bin/contao-console mailer:send --from=sender@example.com --to=recipient@example.com --subject=testmail --body=testmail
# Contao 5.0+
php vendor/bin/contao-console mailer:test --from=sender@example.com --subject=testmail --body=testmail recipient@example.com
Verschiedene Absenderadressen und SMTP-Konten einrichten
Solltest du mehrere E-Mail-Konfigurationen in Contao nutzen wollen, dann ist eine erweiterte Konfiguration über die config.yaml nötig. Wie das geht, erfährst du in diesem YouTube-Video und im Contao Handbuch.
Weitere Fehleranalyse
Sollte die Umstellung auf SMTP dein Problem nicht gelöst haben, findest du hier einige weitere Tipps zur Fehlerbehebung:
Falsche Absenderadresse
Die Absenderadresse muss zum verwendeten Postfach passen, sonst wird die E-Mail-Adresse abgelehnt. Wenn du deine Mails z. B. über das Postfach von mail@firma.com versendest, als Absender allerdings mail@agentur.com verwendest, dann führt dies häufig zu einem Authentifizierungsfehler und die Mails werden vom Mailserver nicht versendet.
E-Mail-Adresse des Webseiten-Administrators
Stelle sicher, dass die passende Absenderadresse beim Startpunkt der Website hinterlegt ist. Hier gilt dasselbe wie für den vorherigen Punkt. Die Adresse muss zum konfigurierten SMTP-Postfach passen und darf z. B. nicht die E-Mail-Adresse der Agentur sein.
Fehlender SPF-Eintrag
Zur Reduzierung von Spam haben viele Provider nun erhöhte Sicherheitsrichtlinien. Google erlaubt z. B. nur den Empfang von Domains, die einen SPF-Eintrag hinterlegt haben. Hierfür kannst du das Tool Mail-Tester nutzen.
Log-Einträge prüfen
Prüfe die Einträge im Backend (System-Log) und im Contao Manager (Tools > System-Log). Gibt es hier Meldungen im Zusammenhang mit dem E-Mail-Versand?
Zugangsdaten korrekt?
Prüfe, ob die Zugangsdaten zum Postfach wirklich korrekt eingegeben sind. Sind Tippfehler enthalten? Hast du versehentlich eine falsche Formatierung gewählt? Achte insbesondere darauf, dass es keine problematischen Sonderzeichen wie #, : oder ; enthält bzw. diese korrekt encodiert wurden. Teste die Zugangsdaten z. B. einmal über den Webmailer.
Ports und Verschlüsselungsmethode
Vergewissere dich, dass du den korrekten Port (587 oder 465) und passende Verschlüsselung (tls oder ssl) nutzt.
PHP-Option
Stelle sicher, dass proc_open aktiviert ist.
Office 365
Wie weiter oben im Blogartikel beschrieben, solltest du hier einen SMTP-Relay konfigurieren. Am besten liest du dir diesen Hilfebeitrag von Microsoft durch.
Anwendungscache nach Änderungen erneuern
Hast du nach einer Änderung den Cache geleert? Gehe dazu wie folgt vor: Contao Manager > Systemwartung > Prod.-Cache erneuern.
Empfehlung: Umfangreicher Videokurs zu Formularen
Du möchtest diese Anleitung als Video sehen? Dann empfehle ich dir unseren Kurs für Formulare.
In diesem Kurs erhältst du aktuelle Praxisanleitungen zum Umgang mit Formularen. Außerdem erfährst du Schritt für Schritt, wie du die beliebte Erweiterung Notification Center konfigurieren und nutzen kannst. Dazu lernst du die Erweiterung Leads und viele andere hilfreiche Extensions im Zusammenhang mit Formularen kennen.
Möchtest du über neue Artikel informiert werden?
Dann trage hier deine E-Mailadresse ein und klicke auf „Abonnieren". Du erhältst regelmäßig aktuelle Infos über Contao und die Contao-Academy.
Über den Autor
Christian Feneberg ist der Initiator und Dozent der Contao Academy. Er bringt über 15 Jahre Praxiswissen in der professionellen Umsetzung von Contao-Websites mit. Zudem ist er Teil des Teams von trakked.io. Er liebt es, sich neues Wissen anzueignen und es weiterzugeben. Abseits des Bildschirms verbringt er am liebsten Zeit mit seiner Familie und in der Natur.
Folge Christian jetzt bei LinkedIn.
10 Kommentare
Philipp
Hinweis für alle bevor sie verzweifeln: Bei mir hat es nicht ausgereicht die eMail-Adresse des Admins in den Contao Backend Einstellungen anzupassen, sondern ich musste sie ebenfalls in der Datenbank "tl_page" id 106 umtragen, hier war noch die alte email-Adresse gespeichert, keine Ahnung warum.
Hallo Philipp, danke für deinen Hinweis. Hast du ggf. die E-Mail-Adresse bei dem Startpunkt der Website hinterlegt und die ID 106 war der Startpunkt deiner Website?
Thomas
Hallo Jörg, hallo Christian,
genau, als 'Webmaster/Agentur' hat man vllt. Zugang zum Webhosting-Paket, ich nutze immer contao@kundendomain.de, die interessiert ja weiter keinen.
Grüße aus Rosotck.
Hallo Thomas,
danke für deine Ergänzung.
Matthias
Hallo, vielen Dank für diese Infos, aber ich scheitere daran, da ich Mails zwingend über STARTTLS (also weder SSL noch TLS) verschicken muss. Gibt es da einen Trick/Tipp/Workaround?
Antwort von Maren Lange
Du stellst auch bei STARTTLS einfach TLS und den entsprechend vom Provider angegebenen Port ein.
Christian Michael
Freundlicher zusätzlicher Hinweis ;-)
In Contao 5 über die MAILER_DSN Umgebungsvariable in deiner .env.local
https://docs.contao.org/manual/de/system/einstellungen/#mailer-dsn
https://community.contao.org/de/showthread.php?84413-parameters-yaml-verschoben-SMTP-aktivieren
Peace!
Gert
Danke für die Anleitung. Reicht es, nach dieser Anleitung alles einzurichten (parameters.yml und Cache erneuern), oder muss irgendwo noch explizit auf das SMTP-Verfahren umgestellt werden? Laut Dokumentation müsste unter "Einstellungen" der Punkt "E-Mail Versand Konfiguration" stehen. Der ist bei meiner 4.13 aber nicht vorhanden.
Danke im Voraus für Eure Hilfe.
Hallo Gert,
es reicht, wenn du diese Einstellungen in der parameters.yml vornimmst.
Vermutlich meinst du die Mailer-Transport-Konfiguration. Damit kannst du mehrere SMTP-Konfigurationen hinterlegen und auswählen.
Michael Gasperl
Hi,
ab Version 4.10 kann man mehrere SMTP-Mailer konfigurieren, in der config.yml. Ersetzt das die obige Konfiguration in der parameters.yml oder wie handhabt man das jetzt?
Danke & liebe Grüße, Michael
Antwort von Maren Lange
Hallo Michael,
wenn Du verschiedene E-Mailadressen und Absenderadressen nutzen willst, musst Du das wie in der Doku beschrieben konfigurieren. Wird alles einschließlich Transports so konfiguriert, wie in der Doku beschrieben, werden die Angaben in der parameters.yml nicht mehr berücksichtigt.
Frank
Alles frisch angelegt. Auf Port 25 geht es ja unverschlüsselt. Domain liegt bei Hosteurope
Antwort von Maren Lange
Portnummer und Verschlüsselungmethode sollte Dir Dein Hoster geben können. Nach jeder Anpassung in der parameters.yml nicht vergessen den Symfony-Cache zu löschen. Außerdem darauf achten, dass die Mailadresse zur versendenden Domain passt.
Frank
Ich bekomme keinen Mailversand per SSL oder TLS hin. Normal auf Port 25 geht es. Wo kann ich da noch suchen?
Hallo Frank,
bei welchem Hoster ist das? Hast du die Konfiguration schon mal in einem Mailprogramm getestet. Sind die Daten alle korrekt?
Martin
Vielen Dank für diese Info! Das hat mir sehr geholfen! Viele Grüße Martin.
Jörg
Hallo Christian,
verstehe ich das richtig, dass hier das Email PW "mailer_password: 'dein-passwort'"
vom Mail Account eingetragen werden muss?
Wie soll das bei Kundenprojekt funktionieren - soll der Kunde mir sein Email PW sagen?
Oder habe ich das etwas falsch verstanden?, Danke
Gruß, Jörg
Hallo Jörg,
ich empfehle hier immer ein zusätzliches Postfach anzulegen. Dieses wird nur zum Mailversand verwendet.
Das Passwort des Kunden wäre denkbar, allerdings ist das eine schlechte Lösung.
Einerseits wegen dem Datenschutz, zum anderen könnte der Kunde das Passwort ja ändern.
[nbsp]
Einen Kommentar schreiben