Ein REDAXO AddOn mit nützlichen E-Mail-Werkzeugen für Überwachung, Diagnose und Validierung.
Features:
- Pre-Send Validator: Domain-Prüfung vor dem Versand
- Bounce Management: Automatische Verarbeitung von Rückläufern via IMAP
- DSGVO-Tools: Log-Anonymisierung und Auskunfts-Export
- SMTP-Diagnose mit verständlichen Hilfestellungen
- SPF/DKIM/DMARC Reputation-Check
- Blacklist-Prüfung (Spamhaus, SpamCop, Barracuda, SORBS)
- Testmail-Versand mit detaillierter Fehleranalyse
- Mail-Statistik mit Heatmap und Erfolgsquote
- Fehler-Log mit Cronjob-Benachrichtigung
- Automatischer Retry bei temporären Fehlern
- YForm-Validator für E-Mail-Domain-Prüfung (EXPERIMENTELL)
- YForm Mailer Value für E-Mail-Versand (EXPERIMENTELL)
- Pre-Send Validator: Prüft Empfänger-Domains vor dem Versand und blockiert ungültige Adressen
- Bounce Management: Überwacht ein IMAP-Postfach auf Rückläufer und führt eine Bounce-Liste
- DSGVO-Tools: Automatische Anonymisierung von Logs und Export-Funktion für Auskunftsersuchen
- SMTP-Diagnose: Umfassende Prüfung der E-Mail-Konfiguration mit verständlichen Hilfestellungen
- Absender-Reputation: SPF/DKIM/DMARC-Prüfung und Blacklist-Check
- Testmail-Versand: Schneller Test mit detaillierter Fehleranalyse
- Mail-Statistik: Übersicht über Versandvolumen, Erfolgsquote und Versandzeiten (Heatmap)
- Domain-Validator: Prüft E-Mail-Domains via DNS/MX-Lookup
- Fehler-Log: Übersicht aller fehlgeschlagenen E-Mails aus dem PHPMailer-Log
- Cronjob Fehlerbericht: Automatische Benachrichtigung bei E-Mail-Fehlern
- Cronjob Retry: Automatisches erneutes Senden bei temporären Fehlern
- YForm-Validator: E-Mail-Domain-Prüfung für Formulare
- YForm Mailer: E-Mail-Versand beim Speichern (Tablemanager-kompatibel)
Das AddOn kann ein IMAP-Postfach überwachen und automatisch Bounce-Mails (Rückläufer) erkennen.
- Gehen Sie zu Einstellungen.
- Tragen Sie Ihre IMAP-Zugangsdaten ein (Host, Port, User, Passwort).
- Nutzen Sie den "Test & Load Folders" Button, um die Verbindung zu prüfen und den Ordner auszuwählen.
- Optional: Aktivieren Sie "Delete processed bounce emails", wenn die Mails nach Verarbeitung gelöscht werden sollen. Andernfalls werden sie als "markiert" (Flagged) gekennzeichnet.
- Optional: Tragen Sie eine Empfänger-Adresse ein, um nur Bounces für ein bestimmtes Projekt zu filtern.
Mit dem "Debug: Show last 5 Emails" Button können Sie prüfen, welche E-Mails im Postfach liegen und ob sie als Bounce erkannt werden ("Analyze"-Button).
Unter dem Menüpunkt Bounces finden Sie eine Liste aller erkannten Rückläufer mit Grund und Häufigkeit.
In den Einstellungen können Sie festlegen, nach wie vielen Tagen E-Mail-Adressen in den Logs automatisch anonymisiert werden sollen (z.B. t***@example.com).
Ein Cronjob führt dies automatisch durch.
Unter dem Menüpunkt DSGVO Export können Sie alle Log-Einträge zu einer spezifischen E-Mail-Adresse als CSV exportieren, um Auskunftsanfragen schnell beantworten zu können.
Der Pre-Send Validator prüft vor jedem E-Mail-Versand ob die Empfänger-Domains gültig sind.
- Domain-Prüfung: Prüft ob die Empfänger-Domain existiert (DNS A/AAAA-Record)
- MX-Record-Prüfung: Optional - Prüft ob die Domain einen Mail-Server hat
- Wegwerf-E-Mail-Erkennung: Blockiert bekannte Wegwerf-Dienste (tempmail, guerrillamail, etc.)
- Tippfehler-Erkennung: Erkennt häufige Tippfehler (gmial.com → gmail.com)
- TLD-Blocklist: Blockiert E-Mails an bestimmte Domainendungen (z.B. .ru, .cn, .xyz)
Unter Einstellungen können Sie festlegen:
| Option | Beschreibung |
|---|---|
| Versand blockieren | E-Mail wird nicht versendet, Fehler wird geloggt |
| Nur ungültige entfernen | Gültige Empfänger erhalten die E-Mail, ungültige werden entfernt |
| Nur loggen | E-Mail wird versendet, Fehler wird nur protokolliert |
| Blockierte TLDs | Kommagetrennte Liste von TLDs die blockiert werden sollen |
Auf der Test-Seite können Sie E-Mail-Adressen prüfen bevor sie verwendet werden:
- Syntax-Prüfung
- Domain-Existenz
- MX-Record vorhanden
- Wegwerf-E-Mail-Erkennung
- Tippfehler-Erkennung
- TLD-Blocklist-Prüfung
Die Diagnose-Seite bietet eine umfassende Prüfung der E-Mail-Konfiguration:
- Verbindungstest: Prüft ob der SMTP-Server erreichbar ist
- Testmail-Versand: Sendet eine echte Test-E-Mail mit detaillierter Fehleranalyse
- Automatische Checks:
- Basis-Konfiguration (Host, Port, Verschlüsselung)
- DNS-Auflösung
- Port-Erreichbarkeit
- SSL/TLS-Zertifikat
- SMTP-Handshake
- Provider-spezifische Prüfungen (Microsoft 365, Gmail, etc.)
- SPF-Record Prüfung mit Warnung bei unsicherer Konfiguration
- DKIM-Record Suche mit gängigen Selektoren
- DMARC-Policy Analyse (reject/quarantine/none)
- Blacklist-Check gegen Spamhaus, SpamCop, Barracuda, SORBS
Die Diagnose prüft automatisch die Reputation Ihrer Absender-Domain:
| Check | Beschreibung |
|---|---|
| SPF | Sender Policy Framework - Definiert welche Server E-Mails für Ihre Domain senden dürfen |
| DKIM | DomainKeys Identified Mail - Digitale Signatur zur Authentifizierung |
| DMARC | Domain-based Message Authentication - Policy für SPF/DKIM-Fehler |
| Blacklist | Prüfung ob Ihre Server-IP auf Spam-Blacklists steht |
Bei Problemen erhalten Sie:
- Klartext-Erklärung: Was bedeutet der Fehler?
- Lösungsvorschläge: Konkrete Schritte zur Behebung
- Technische Details: Für Entwickler ausklappbar
Für erweiterte Analysen werden Links zu diesen Tools angeboten:
- MXToolbox SuperTool - Umfassende DNS/Mail-Analyse
- KLXM E-Mail Check - Schneller E-Mail-Test
- Mail-Tester - Spam-Score Analyse
- Microsoft 365 / Outlook
- Google Gmail / Workspace
- IONOS / 1&1
- Strato
- Host Europe
- All-Inkl
- Apple iCloud
- Eigene SMTP-Server
Die Statistik-Seite zeigt eine Übersicht über alle versendeten E-Mails:
- Versandvolumen: Heute, diese Woche, diesen Monat, gesamt
- Erfolgsquote: Prozentsatz erfolgreich zugestellter E-Mails
- Versandzeiten-Heatmap: Wann werden die meisten E-Mails versendet?
- Top Empfänger-Domains: Häufigste Zieldomains
- Top Absender-Domains: Häufigste Reply-To/From (ohne eigene Domain)
- Top Betreff-Muster: Häufigste Betreff-Zeilen
Sendet automatisch Berichte über fehlgeschlagene E-Mails per E-Mail.
Einrichtung:
- Gehe zu AddOns → Cronjob
- Erstelle einen neuen Cronjob vom Typ "E-Mail Fehlerbericht"
- Konfiguriere:
- Empfänger: E-Mail-Adresse(n) für den Bericht (kommagetrennt)
- Nur bei Fehlern senden: Bericht nur wenn neue Fehler vorhanden
- EML-Anhänge: Archivierte E-Mails als Anhang mitsenden
- Filter Betreff: Nur E-Mails mit bestimmtem Betreff melden
- Filter Empfänger: Nur E-Mails an bestimmte Empfänger melden
- Zeitplan festlegen (z.B. täglich)
- Cronjob aktivieren
Versendet E-Mails mit temporären Fehlern automatisch erneut.
Temporäre Fehler (Retry sinnvoll):
- Timeout, Verbindungsabbruch
- Greylisting
- Server überlastet (4xx Codes)
Permanente Fehler (kein Retry):
- Empfänger existiert nicht
- Domain nicht gefunden
- Spam-Blocking
Konfiguration:
- Maximal 3 Retry-Versuche pro E-Mail
- Wartezeiten: 1h, 6h, 24h
Prüft, ob eine E-Mail-Adresse zu einer existierenden Domain gehört, die E-Mails empfangen kann.
use FriendsOfRedaxo\MailTools\DomainValidator;
// Vollständige Validierung
$result = DomainValidator::validate('[email protected]');
if ($result['valid']) {
echo 'E-Mail-Domain ist gültig';
} else {
echo 'Fehler: ' . $result['message'];
}
// Ergebnis-Array:
// [
// 'valid' => true/false,
// 'syntax' => true/false,
// 'domain' => true/false,
// 'mx' => true/false,
// 'message' => 'Statusmeldung'
// ]
// Schnelle Prüfung (nur true/false)
if (DomainValidator::isValid('[email protected]')) {
// Domain existiert
}
// Strenge Prüfung - Domain muss MX-Record haben
if (DomainValidator::isValid('[email protected]', true)) {
// Domain hat Mailserver
}
// Einzelne Prüfungen
$domain = DomainValidator::extractDomain('[email protected]'); // 'example.com'
$hasMx = DomainValidator::hasMxRecord('example.com');
$hasA = DomainValidator::isDomainValid('example.com');In YForm-Formularen kann der email_domain Validator verwendet werden:
Pipe-Format:
validate|email_domain|feldname|Fehlermeldung|0
PHP-Schreibweise:
$yform->setValidateField('email_domain', ['email', 'Diese E-Mail-Domain existiert nicht', 0]);Parameter:
feldname: Name des E-Mail-FeldesFehlermeldung: Wird angezeigt wenn Domain ungültig0/1: Strenge MX-Prüfung (1 = Domain muss MX-Record haben)
Beispiel im Pipe-Format:
text|email|E-Mail|
validate|email|email|Bitte gültige E-Mail eingeben
validate|email_domain|email|Diese E-Mail-Domain existiert nicht|0
Beispiel in PHP:
$yform = new rex_yform();
$yform->setObjectparams('form_action', rex_getUrl());
$yform->setValueField('text', ['email', 'E-Mail']);
$yform->setValidateField('email', ['email', 'Bitte gültige E-Mail eingeben']);
$yform->setValidateField('email_domain', ['email', 'Diese E-Mail-Domain existiert nicht', 0]);
echo $yform->getForm();Das mailer Value ermöglicht E-Mail-Versand beim Speichern eines Datensatzes - direkt im Tablemanager konfigurierbar.
- Templates oder direkter Body - Beides möglich
- Dynamische Empfänger - Aus anderen Tabellenfeldern
- Upload-Anhänge - Einfach Feldnamen angeben
- CC, BCC, Reply-To - Volle PHPMailer-Unterstützung
- Versand-Modus - Immer / Nur bei Neuanlage / Nie (manuell)
- Speichert Versandzeitpunkt - Optional in der DB
- Neues Feld hinzufügen
- Typ: mailer
- Konfigurieren:
- Template: YForm E-Mail-Template (optional)
- Empfänger: E-Mail oder Feldname (z.B.
email) - Betreff: Mit
###feldname###Platzhaltern - Nachricht: HTML/Text (wenn kein Template)
- Anhänge: Upload-Feldnamen kommagetrennt
- Versand-Modus: Wann soll gesendet werden?
mailer|mail_sent|E-Mail-Versand|kontakt_template|email||###name### hat sich angemeldet|email|||dokument,foto|0
| Nr | Parameter | Beschreibung |
|---|---|---|
| 1 | name | Feldname (speichert Versandzeitpunkt) |
| 2 | label | Bezeichnung im Backend |
| 3 | template | E-Mail-Template Name |
| 4 | to | Empfänger (E-Mail oder Feldname) |
| 5 | subject | Betreff mit Platzhaltern |
| 6 | body | Nachricht (wenn kein Template) |
| 7 | reply_to | Reply-To (E-Mail oder Feldname) |
| 8 | cc | CC-Empfänger |
| 9 | bcc | BCC-Empfänger |
| 10 | attachments | Upload-Feldnamen, kommagetrennt |
| 11 | send_mode | 0=immer, 1=nur neu, 2=nie |
| Modus | Beschreibung |
|---|---|
| 0 - Immer | Bei jedem Speichern |
| 1 - Nur bei Neuanlage | Nur beim ersten Speichern |
| 2 - Nie | Manuell per EP oder Button |
Optional kann für jedes Mailer-Feld eine eigene SMTP-Konfiguration hinterlegt werden - unabhängig von der globalen PHPMailer-Konfiguration.
JSON-Format im Feld "SMTP-Konfiguration":
{
"host": "smtp.example.com",
"port": 587,
"secure": "tls",
"auth": true,
"username": "[email protected]",
"password": "geheim123",
"from": "[email protected]",
"from_name": "Meine App"
}Verfügbare Optionen:
| Option | Typ | Beschreibung |
|---|---|---|
host |
string | SMTP-Server Adresse |
port |
int | Port (25, 465, 587) |
secure |
string | Verschlüsselung: tls, ssl oder leer |
auth |
bool | Authentifizierung aktivieren |
username |
string | SMTP-Benutzername |
password |
string | SMTP-Passwort |
from |
string | Absender-E-Mail überschreiben |
from_name |
string | Absender-Name überschreiben |
debug |
int | Debug-Level (0-4) |
timeout |
int | Verbindungs-Timeout in Sekunden |
Anwendungsfälle:
- Verschiedene Absender für verschiedene Formulare
- Transaktions-Mails über anderen SMTP-Provider
- Mandantenfähigkeit mit unterschiedlichen Zugangsdaten
- Test- vs. Produktiv-Mailserver
Kontaktformular mit Template:
text|name|Name|
text|email|E-Mail|
textarea|message|Nachricht|
mailer|mail_sent|E-Mail|kontakt_tpl|[email protected]||||email
Bestellbestätigung mit Anhang:
text|kunde_email|Kunden-E-Mail|
upload|rechnung|Rechnung|
mailer|bestaetigung_sent||bestellung_tpl|kunde_email||||rechnung|1
Das Mailer Value kann auch in PHP verwendet werden:
Einfaches Beispiel:
$yform = new rex_yform();
$yform->setObjectparams('form_action', rex_getUrl());
$yform->setValueField('text', ['name', 'Name']);
$yform->setValueField('text', ['email', 'E-Mail']);
$yform->setValueField('textarea', ['message', 'Nachricht']);
// Mailer Value - sendet E-Mail beim Speichern
$yform->setValueField('mailer', [
'mail_sent', // name - Feldname (speichert Versandzeitpunkt)
'E-Mail-Versand', // label
'kontakt_template', // template - YForm E-Mail-Template
'email', // to - Empfänger (hier: aus Feld "email")
'', // subject - leer wenn Template verwendet
'', // body - leer wenn Template verwendet
'email', // reply_to
'', // cc
'', // bcc
'', // attachments
0 // send_mode: 0=immer, 1=nur neu, 2=nie
]);
echo $yform->getForm();Mit direktem Body (ohne Template):
$yform->setValueField('mailer', [
'notification_sent',
'Benachrichtigung',
'', // kein Template
'[email protected]', // feste E-Mail
'Neue Anfrage von ###name###', // Betreff mit Platzhalter
'<h1>Neue Anfrage</h1><p>###message###</p>', // HTML-Body
'email', // reply_to aus Formularfeld
'', // cc
'[email protected]', // bcc
'', // attachments
0 // send_mode
]);Mit Upload-Anhängen:
$yform->setValueField('upload', ['dokument', 'Dokument hochladen', '', '', 'pdf,doc,docx']);
$yform->setValueField('upload', ['foto', 'Foto', '', '', 'jpg,png']);
$yform->setValueField('mailer', [
'mail_sent',
'E-Mail',
'bewerbung_template',
'[email protected]',
'',
'',
'email',
'',
'',
'dokument,foto', // Anhänge: Feldnamen kommagetrennt
1 // nur bei Neuanlage
]);| Platzhalter | Beschreibung |
|---|---|
###feldname### |
Wert eines Tabellenfelds |
###id### |
ID des Datensatzes |
###REX_SERVER### |
Servername |
###REX_DATE### |
Datum (TT.MM.JJJJ) |
###REX_DATETIME### |
Datum und Uhrzeit |
Mit bedingten Blöcken können Sie Inhalte nur anzeigen, wenn ein Feld ausgefüllt wurde. Das Template bleibt dabei im Browser lesbar (HTML-Kommentare).
Syntax:
<!--@IF:feldname-->
Dieser Text erscheint nur, wenn "feldname" ausgefüllt ist.
Telefon: ###telefon###
<!--@ENDIF:feldname-->Beispiel E-Mail-Template:
<h1>Neue Kontaktanfrage</h1>
<p><strong>Name:</strong> ###name###</p>
<p><strong>E-Mail:</strong> ###email###</p>
<!--@IF:telefon-->
<p><strong>Telefon:</strong> ###telefon###</p>
<!--@ENDIF:telefon-->
<!--@IF:firma-->
<p><strong>Firma:</strong> ###firma###</p>
<!--@ENDIF:firma-->
<h2>Nachricht</h2>
<p>###message###</p>Tipp: Da die Bedingungen als HTML-Kommentare formatiert sind, können Sie das Template einfach im Browser öffnen und das Layout prüfen - die Kommentare werden nicht angezeigt.
Unter E-Mail Tools → Fehler-Log werden alle fehlgeschlagenen E-Mails angezeigt:
- Statistiken: Fehler heute, diese Woche, diesen Monat, gesamt
- Zeitfilter: Letzte Stunde bis alle Einträge
- Details: Zeitpunkt, Empfänger, Betreff, Fehlermeldung
use FriendsOfRedaxo\MailTools\LogParser;
// Alle fehlgeschlagenen E-Mails
$failed = LogParser::getFailedEmails();
// Noch nicht gemeldete Fehler
$unreported = LogParser::getUnreportedFailedEmails();
// Statistiken
$stats = LogParser::getStatistics();
// [
// 'today' => 2,
// 'week' => 5,
// 'month' => 12,
// 'total' => 47,
// 'top_domains' => ['example.com' => 3, ...]
// ]
// Als gemeldet markieren
LogParser::markAsReported($unreported);Ein Cronjob analysiert regelmäßig das PHPMailer-Log und sendet Berichte über fehlgeschlagene E-Mails per E-Mail.
- Gehen Sie zu System → Cronjob
- Neuen Cronjob erstellen
- Typ: E-Mail Fehlerbericht
- Konfigurieren Sie:
- Empfänger: Kommagetrennte E-Mail-Adressen
- Nur bei Fehlern: Bericht nur senden wenn neue Fehler vorhanden
- EML anhängen: Archivierte E-Mails als Anhang mitsenden (optional)
- Filter: Betreff: Nur E-Mails melden, deren Betreff diesen Text enthält
- Filter: Empfänger: Nur E-Mails melden, deren Empfänger diesen Text enthält
- Zeitplan festlegen (z.B. täglich)
- Cronjob aktivieren
| Filter | Wert | Beschreibung |
|---|---|---|
| Betreff | Newsletter |
Nur Newsletter-Fehler melden |
| Betreff | Bestellung |
Nur Bestellbestätigungs-Fehler |
| Empfänger | @firma.de |
Nur interne E-Mails überwachen |
| Empfänger | @gmail.com |
Nur Gmail-Empfänger überwachen |
Tipp: Sie können mehrere Cronjobs mit unterschiedlichen Filtern anlegen, um verschiedene Teams über relevante Fehler zu informieren.
Unter E-Mail Tools → Test können Sie einen Test-Report an sich selbst senden, um das Aussehen zu prüfen.
Ein zweiter Cronjob versendet E-Mails mit temporären Fehlern automatisch erneut.
- Connection Timeout / Refused
- SMTP 4xx Codes (421, 450, 451, 452)
- Greylisting
- Rate Limiting
- Server überlastet
- User unknown / Mailbox not found
- Domain not found
- SMTP 5xx Codes (550, 551, 552, 553, 554)
- Blacklisted / Blocked
- Gehen Sie zu System → Cronjob
- Neuen Cronjob erstellen
- Typ: E-Mail Retry
- Zeitplan festlegen (z.B. stündlich)
- Cronjob aktivieren
- Maximal 3 Versuche pro E-Mail
- Wartezeiten: 1. Retry nach 1h, 2. nach 6h, 3. nach 24h
- Benötigt archivierte E-Mails (PHPMailer Archiv-Funktion)
use FriendsOfRedaxo\MailTools\RetryHandler;
// Prüfen ob Fehler temporär ist
if (RetryHandler::isTemporaryError($errorMessage)) {
// Retry sinnvoll
}
// Alle retry-fähigen E-Mails
$retryable = RetryHandler::getRetryableEmails();
// Einzelne E-Mail erneut senden
$result = RetryHandler::retry($hash);
// Alle fälligen Retries ausführen
$stats = RetryHandler::processRetries();
// ['total' => 5, 'success' => 3, 'failed' => 2]Unter E-Mail Tools → Test können Sie:
- Domain-Validator testen: E-Mail eingeben und Domain-Existenz prüfen
- Test-Report senden: Beispiel-Fehlerbericht an eine E-Mail-Adresse senden
- Im REDAXO Installer nach
mail_toolssuchen - AddOn installieren und aktivieren
| Paket | Version |
|---|---|
| REDAXO | >= 5.17 |
| PHP | >= 8.1 |
| PHPMailer | >= 2.10 |
- Cronjob AddOn - für automatische Fehlerberichte
- YForm AddOn - für den E-Mail-Domain-Validator in Formularen
MIT License
- Friends Of REDAXO
- Sponsored by Polarpixel - Peter Bickel