Skip to content

FriendsOfREDAXO/mail_tools

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Mail Tools für REDAXO

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)

Features im Detail

  • 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)

↩️ Bounce Management (Neu in 2.0)

Das AddOn kann ein IMAP-Postfach überwachen und automatisch Bounce-Mails (Rückläufer) erkennen.

Einrichtung

  1. Gehen Sie zu Einstellungen.
  2. Tragen Sie Ihre IMAP-Zugangsdaten ein (Host, Port, User, Passwort).
  3. Nutzen Sie den "Test & Load Folders" Button, um die Verbindung zu prüfen und den Ordner auszuwählen.
  4. Optional: Aktivieren Sie "Delete processed bounce emails", wenn die Mails nach Verarbeitung gelöscht werden sollen. Andernfalls werden sie als "markiert" (Flagged) gekennzeichnet.
  5. Optional: Tragen Sie eine Empfänger-Adresse ein, um nur Bounces für ein bestimmtes Projekt zu filtern.

Debugging

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).

Bounce-Liste

Unter dem Menüpunkt Bounces finden Sie eine Liste aller erkannten Rückläufer mit Grund und Häufigkeit.


🔒 DSGVO / GDPR Tools (Neu in 2.0)

Log-Anonymisierung

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.

Auskunftsrecht (Export)

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.


🛡️ Pre-Send Validator

Der Pre-Send Validator prüft vor jedem E-Mail-Versand ob die Empfänger-Domains gültig sind.

Funktionen

  • 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)

Konfiguration

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

Testseite

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

🩺 SMTP-Diagnose

Die Diagnose-Seite bietet eine umfassende Prüfung der E-Mail-Konfiguration:

Funktionen

  • 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

Absender-Reputation

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

Verständliche Fehlermeldungen

Bei Problemen erhalten Sie:

  • Klartext-Erklärung: Was bedeutet der Fehler?
  • Lösungsvorschläge: Konkrete Schritte zur Behebung
  • Technische Details: Für Entwickler ausklappbar

Externe Diagnose-Tools

Für erweiterte Analysen werden Links zu diesen Tools angeboten:

Erkannte Provider

  • Microsoft 365 / Outlook
  • Google Gmail / Workspace
  • IONOS / 1&1
  • Strato
  • Host Europe
  • All-Inkl
  • Apple iCloud
  • Eigene SMTP-Server

📊 Mail-Statistik

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

⏰ Cronjobs

E-Mail Fehlerbericht

Sendet automatisch Berichte über fehlgeschlagene E-Mails per E-Mail.

Einrichtung:

  1. Gehe zu AddOns → Cronjob
  2. Erstelle einen neuen Cronjob vom Typ "E-Mail Fehlerbericht"
  3. 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
  4. Zeitplan festlegen (z.B. täglich)
  5. Cronjob aktivieren

E-Mail Retry

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

🔍 E-Mail Domain-Validator

Prüft, ob eine E-Mail-Adresse zu einer existierenden Domain gehört, die E-Mails empfangen kann.

PHP-Verwendung

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');

YForm Validator

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-Feldes
  • Fehlermeldung: Wird angezeigt wenn Domain ungültig
  • 0/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();

✉️ YForm Mailer (Tablemanager-kompatibel)

Das mailer Value ermöglicht E-Mail-Versand beim Speichern eines Datensatzes - direkt im Tablemanager konfigurierbar.

Features

  • 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

Konfiguration im Tablemanager

  1. Neues Feld hinzufügen
  2. Typ: mailer
  3. 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?

Pipe-Format

mailer|mail_sent|E-Mail-Versand|kontakt_template|email||###name### hat sich angemeldet|email|||dokument,foto|0

Parameter

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

Versand-Modi

Modus Beschreibung
0 - Immer Bei jedem Speichern
1 - Nur bei Neuanlage Nur beim ersten Speichern
2 - Nie Manuell per EP oder Button

Eigene SMTP-Konfiguration

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

Beispiele

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

PHP-Schreibweise (YForm)

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

Platzhalter Beschreibung
###feldname### Wert eines Tabellenfelds
###id### ID des Datensatzes
###REX_SERVER### Servername
###REX_DATE### Datum (TT.MM.JJJJ)
###REX_DATETIME### Datum und Uhrzeit

Bedingte Blöcke

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.


📊 Fehler-Log

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

PHP-Verwendung

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);

📧 Cronjob für Fehlerberichte

Ein Cronjob analysiert regelmäßig das PHPMailer-Log und sendet Berichte über fehlgeschlagene E-Mails per E-Mail.

Einrichtung

  1. Gehen Sie zu System → Cronjob
  2. Neuen Cronjob erstellen
  3. Typ: E-Mail Fehlerbericht
  4. 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
  5. Zeitplan festlegen (z.B. täglich)
  6. Cronjob aktivieren

Filter-Beispiele

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.

Report-Vorschau

Unter E-Mail Tools → Test können Sie einen Test-Report an sich selbst senden, um das Aussehen zu prüfen.


🔄 Cronjob für Retry

Ein zweiter Cronjob versendet E-Mails mit temporären Fehlern automatisch erneut.

Temporäre Fehler (Retry sinnvoll)

  • Connection Timeout / Refused
  • SMTP 4xx Codes (421, 450, 451, 452)
  • Greylisting
  • Rate Limiting
  • Server überlastet

Permanente Fehler (kein Retry)

  • User unknown / Mailbox not found
  • Domain not found
  • SMTP 5xx Codes (550, 551, 552, 553, 554)
  • Blacklisted / Blocked

Einrichtung

  1. Gehen Sie zu System → Cronjob
  2. Neuen Cronjob erstellen
  3. Typ: E-Mail Retry
  4. Zeitplan festlegen (z.B. stündlich)
  5. Cronjob aktivieren

Retry-Logik

  • 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)

PHP-Verwendung

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]

🧪 Testseite

Unter E-Mail Tools → Test können Sie:

  1. Domain-Validator testen: E-Mail eingeben und Domain-Existenz prüfen
  2. Test-Report senden: Beispiel-Fehlerbericht an eine E-Mail-Adresse senden

Installation

  1. Im REDAXO Installer nach mail_tools suchen
  2. AddOn installieren und aktivieren

Voraussetzungen

Paket Version
REDAXO >= 5.17
PHP >= 8.1
PHPMailer >= 2.10

Empfohlen

  • Cronjob AddOn - für automatische Fehlerberichte
  • YForm AddOn - für den E-Mail-Domain-Validator in Formularen

Lizenz

MIT License

Credits

About

E-Mail-Tools und Reporting

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published