Dokumentation & System-Enzyklopädie
Umfassender technischer Leitfaden, Verzeichnis der UI-Elemente und Shared-Hosting-Optimierungshandbuch für MarbleSend.
Systemarchitektur & Hosting-Grundlage
Philosophie: Self-hosted, Single-Tenant, Zero-Build, Shared-Hosting-freundlich
MarbleSend wurde von Grund auf entwickelt, um ein berüchtigtes Problem bei E-Mail-Marketing-Software zu lösen: die Notwendigkeit teurer dedizierter VPS-Instanzen, Redis-Server, Node-Build-Pipelines oder komplexer Docker-Orchestrierung. MarbleSend läuft auf Standard-Shared-Hosting (cPanel, Hostinger, DirectAdmin, Plesk, LiteSpeed) mit reinem PHP 8.2+ ohne serverseitige Kompilierung.
Null SQL-Injection
Jede Datenbankabfrage verwendet strikte Prepared Statements ohne ORM-Overhead.
At-Rest-Verschlüsselung
SMTP-Zugangsdaten, KI-API-Keys und webhook-Secrets werden in Crypto.php verschlüsselt.
Race-Condition-Schutz
Der Worker beansprucht Warteschlangen-Batches atomar über MySQL-Status-Updates mit strikter Deadline-Behandlung.
Sofortige Bereitstellung
Vorkompiliertes Tailwind CSS & vendoriertes Alpine.js. ZIP-file hochladen, Installer ausführen, fertig.
0.1 Zero-Build Hosting & Runtime-Philosophie
Die meisten modernen Webanwendungen erfordern Node.js-Build-Pipelines, Redis-Daemon-Server, Docker-Orchestrierung oder Root-VPS-Zugriff. MarbleSend lehnt diese Komplexität ab. Speziell für erschwingliches Shared Hosting (cPanel, Hostinger, Plesk, LiteSpeed) entwickelt, läuft es auf reinem PHP 8.2+ ohne serverseitige Kompilierung.
Keine Server-Kompilierung
Kein npm, Webpack, Vite oder Composer auf dem Produktionsserver erforderlich. Tailwind CSS ist in statische Assets vorkompiliert, Alpine.js ist lokal eingebunden und PHPMailer 6.9.x liegt direkt im Ordner vendor-lite.
Geringer Speicherbedarf
Der maximale Speicherverbrauch bleibt selbst bei der Verarbeitung von E-Mail-Queue-Batches unter 32MB. Läuft reibungslos innerhalb strikter Shared-Hosting-Limits (64MB-128MB php.ini-Zuweisung).
Keine verbotenen Funktionen
Vermeidet strikt gefährliche Funktionen, die von Shared-Hosting-Providern häufig deaktiviert werden (exec, shell_exec, system, passthru, eval, proc_close). Alle externen Operationen nutzen natives cURL mit Timeouts.
0.2 Sicherheitsperimeter & Verzeichnis-Isolation
MarbleSend implementiert ein strenges zweistufiges Verzeichnis-Layout, das öffentliche Web-Assets von sensiblem Anwendungscode und Storage trennt, um Directory Traversal und File-Exposition auszuschließen.
Isoliertes Document Root (public/)
Nur das Verzeichnis public/ ist für den Webserver freigegeben. Zeigen Sie mit dem DocumentRoot Ihrer Domain auf /public. Selbst bei aktivem Directory Listing in Apache/Nginx können Quell-Files nicht durchsucht werden.
Geschützter Anwendungskern (app/)
Controller, Services, Bibliotheken, Views und Konfiguration befinden sich außerhalb des Document Roots in app/. Datenbank-Zugangsdaten in app/config/config.php und Verschlüsselungsschlüssel sind per HTTP unzugänglich.
Sicherer Storage & Migrationen
Das Verzeichnis storage/ (mit Worker-Logs) und migrations/ (mit rohen SQL-Schema-Files) liegen vollständig außerhalb von public/, was unbefugte Downloads von Systemprotokollen oder Datenbankstrukturen verhindert.
0.3 Zero-ORM-Datenbank & PDO Prepared Statements
Object-Relational Mapper (ORMs) wie Eloquent oder Doctrine verursachen enormen Speicher-Overhead, komplexe Hydration-Schichten und unberechenbare N+1-Abfragemuster. MarbleSend setzt direkt auf natives PHP-PDO mit 100% Prepared Statements.
100% Prepared Statements
Jede einzelne Datenbankabfrage bindet Parameter explizit (PDO::PARAM_STR, PDO::PARAM_INT). SQL-Abfragestrukturen und Benutzerdaten vermischen sich niemals, was mathematische Immunität gegen SQL-Injection garantiert.
Berechenbare Hochleistungs-Queries
Direkte SQL-Ausführung eliminiert den ORM-Hydration-Overhead und führt Listenoperationen sowie Batch-Queue-Updates bis zu 5-mal schneller mit minimaler CPU-Auslastung auf Shared-Datenbanken aus.
Idempotente Schema-Migrationen
Datenbankversionen werden über nummerierte SQL-Files (0001_initial.sql bis 0019_add_feedback_attachment.sql) nachverfolgt, die durch einen idempotenten Runner mit IF NOT EXISTS-Klauseln ausgeführt und in cm_migrations protokolliert werden.
Single-Tenant-Datenisolation
Als eigenständige Single-Tenant-Software ohne tenant_id-Spalten konzipiert. Indizes bleiben kompakt, sequentielle Scans werden vermieden und das Risiko von mandantenübergreifenden Datenlecks ist gleich null.
0.4 At-Rest-Verschlüsselung & Krypto-Standards
Sensible Geheimnisse werden niemals im Klartext gespeichert. MarbleSend verschlüsselt Zugangsdaten mit branchenüblicher authentifizierter symmetrischer Kryptografie über App\Lib\Crypto.
AES-256-GCM Verschlüsselung
Verwendet den Advanced Encryption Standard im Galois/Counter Mode (AES-256-GCM), der sowohl Vertraulichkeit als auch kryptografische Integritätsprüfung bietet, um Manipulationen sofort zu erkennen.
Einzigartiger 96-Bit Zufalls-IV
Jeder verschlüsselte Wert erzeugt über random_bytes() einen kryptografisch sicheren 12-Byte (96-Bit) Initialisierungsvektor (IV), sodass identische Klartexte vollkommen unterschiedliche Ciphertexte erzeugen.
Verschlüsselter Secret-Katalog
Schützt automatisch SMTP-Relay-Passwörter, BYOK-KI-API-Keys (OpenAI, Claude, Gemini, DeepSeek, Kimi, OpenRouter), Webhook-Signatur-Secrets und den Envato Purchase Code.
Master-Key-Isolation
Der 32-Byte ENCRYPTION_KEY wird bei der Installation generiert und ausschließlich in app/config/config.php (chmod 0600) gespeichert. Die Datenbank enthält niemals den Verschlüsselungsschlüssel.
0.5 Dual-Worker-Engine & Nebenläufigkeitssicherheit
MarbleSend delegiert alle zeitintensiven und terminierten Aufgaben an einen zentralen Background-Worker-Runner, sodass das Admin-Dashboard stets schnell und reaktionsschnell bleibt.
Zentraler Master-Background-Runner
worker.php koordiniert Queue-Batch-Versand, wiederkehrende Ausführungen, RSS-Feed-Abfragen, Autoresponder-Sequenzen und den erneuten Versand ungeöffneter Kampagnen.
CLI Cron & Web-Cron Flexibilität
Ausführung über native System-Crontab (* * * * * php /path/to/worker.php) oder über sicheren externen HTTP-Ping an /cron.php?key=YOUR_KEY. Beide Wege nutzen identische Service-Logik.
Atomares Queue-Claiming (Keine Doppel-Sends)
Worker-Instanzen beanspruchen Queue-Batches mittels atomarer SQL-Status-Updates (UPDATE cm_email_queue SET status = 'processing' WHERE status = 'pending' LIMIT N). Selbst parallele Läufe versenden niemals Duplikate.
Heartbeat & Wiederherstellung hängender Jobs
Protokolliert Ausführungs-Heartbeats in cm_settings. Wird ein Worker unterbrochen (z.B. Host-Timeout), erkennen nachfolgende Läufe blockierte Queue-Elemente automatisch und stellen sie wieder her.
0.6 Serveranforderungen & Hosting-Kompatibilitätsmatrix
MarbleSend ist nachweislich mit allen gängigen Shared-Hosting-Umgebungen, Control Panels und Serverkonfigurationen kompatibel, die PHP 8.2+ Basisanforderungen erfüllen.
| Komponente | Mindestanforderung | Empfohlen | Betriebshinweise |
|---|---|---|---|
| PHP-Runtime | PHP 8.2.0+ | PHP 8.2 oder 8.3 | strict_types=1 in allen Anwendungs-Files deklariert. |
| Datenbank-Engine | MySQL 8.0+ / MariaDB 10.6+ | MariaDB 10.11+ oder MySQL 8.0+ | InnoDB-Engine erforderlich. UTF8MB4 vollständiger Unicode-Zeichensatz. |
| Erforderliche Extensions | pdo_mysql, openssl, mbstring, json, curl, simplexml, sodium | Alle Standard-Core-Extensions aktiviert | Standardmäßig auf 99% aller Shared-Hosting-Pakete aktiv. Optional: intl für Lokalisierung. |
| Webserver | Apache, Nginx, LiteSpeed, Caddy | Apache + mod_rewrite oder LiteSpeed | Vorkonfigurierte .htaccess-Files im Root und in public/ enthalten. |
| Speicherzuweisung | 32MB memory_limit | 64MB - 128MB | Queue-Batches werden konservativ verarbeitet, um Speicherüberläufe zu verhindern. |
| Cron-Scheduler | CLI crontab ODER Web-Cron HTTP-Ping | CLI cron jede Minute | Web-Cron-Fallback-Endpoint (/cron.php?key=...) für Hosts ohne CLI-Zugang. |
Getestete Hosting-Control-Panels
Vollständig getestet und verifiziert auf cPanel, Hostinger hPanel, Plesk, DirectAdmin, CyberPanel, AApanel, CloudPanel und Standard-Ubuntu/Debian LAMP/LEMP-Stacks.
Dashboard-Übersicht (/dashboard)
Zentrales Kontrollzentrum für Zielgruppen-Zustand, Zustell-KPIs, Worker-Heartbeat und Zeitplan-Automatisierung.
Dashboard-Komponentenanatomie & Support-Inspektor
Bewegen Sie den Mauszeiger über ein Element oder klicken Sie darauf, um Backend-Details anzuzeigenGesamt gesendet
Protokollaggregation & MonatszählerGeöffnet / Öffnungsrate
1x1-Tracking-Pixel & Apple MPP-HinweisGeklickt / CTR
Klick-Weiterleitungs-InjektorAbgemeldete Zielgruppe
Abmelderate & RFC-KonformitätWorker-Heartbeat
Cron-Status & 1-Minuten-IntervallVolumen-Wachstumsdiagramm
Skalierung 7T, 30T, 90T, YTDTabelle der letzten Broadcasts
Status-Lebenszyklus & Audit-TrailZustellbarkeits-Zustand
SMTP-Profil-Bereitschaft1.1 E-Mail-Performance KPI-Karten
| Element | Berechnung & Quelle | Visuelle Bedeutung | Support-Vermeidungs-Begründung |
|---|---|---|---|
| Karte Gesamt gesendet | COUNT(cm_email_logs) + SUM(cm_campaigns.sent_count) | Zeigt die Gesamtzahl aller jemals versendeten Broadcast- und Zeitplan-E-Mails an. Der Untertext zeigt das in diesem Kalendermonat gesendete Volumen. | Verhindert Verwirrung, wenn ältere Protokolleinträge bereinigt werden; historische Campaign-Zähler stellen sicher, dass die Gesamtsummen niemals sinken. |
| Gesamt geöffnet / Öffnungsrate | COUNT(DISTINCT contact_id WHERE opened_at IS NOT NULL) / Total Sent * 100 | Misst das Engagement über ein transparentes 1x1-Tracking-Pixel, das in den Footer der HTML-E-Mail eingefügt wird. | Apple MPP-Hinweis: iOS Mail Privacy Protection ruft Bilder über Apple-Proxys vorab ab, was die Öffnungen künstlich erhöhen kann. Die CTR ist die echte geschäftliche Metrik. |
| Gesamt geklickt / CTR | COUNT(DISTINCT contact_id WHERE clicked_at IS NOT NULL) / Total Sent * 100 | Misst eindeutige Link-Klicks von Abonnenten. Umgeschrieben über /track/click.php. | Abmeldelinks und Bestätigungslinks sind von der Campaign-CTR ausgeschlossen, um die statistische Integrität zu wahren. |
| Karte Abgemeldet | COUNT(status = 'unsubscribed') / Total Contacts * 100 | Anteil der Empfängerliste, die sich über den obligatorischen 1-Klick-Abmeldemechanismus abgemeldet hat. | Ein gesunder Schwellenwert liegt bei < 0,5 %. Eine Abmelderate > 1 % deutet auf Zielgruppen-Ermüdung, gekaufte Listen oder geringe Relevanz hin. |
Gesamt gesendet & monatlicher Durchsatz
Erfasst alle jemals erfolgreich über Broadcasts, wiederkehrende Zeitpläne, RSS-Feeds und Autoresponder versendeten E-Mails. Der Untertext hebt das im aktuellen Kalendermonat versendete Volumen hervor. Da MarbleSend historische Campaign-Zähler neben aktiven E-Mail-Zustellungsprotokollen aggregiert, bleiben Lebenszeit-Metriken dauerhaft erhalten und präzise, selbst wenn ältere Protokollzeilen zur Datenbankwartung bereinigt werden.
Eindeutig geöffnet & Apple MPP-Dynamik
Wird über ein transparentes 1x1-Tracking-Pixel erfasst, das in den HTML-E-Mail-Footer eingefügt wird. Öffnungen werden eindeutig pro Kontakt und Campaign erfasst (First-Touch-Zeitstempel). Wichtiger Zustellbarkeitshinweis: Apple Mail Privacy Protection (MPP) zwischenspeichert Bilder über Proxyserver, was die Öffnungszahlen künstlich erhöhen kann. Während die Öffnungsrate ein wertvoller Trendindikator bleibt, stellt die Klickrate (CTR) die nachprüfbare Konvertierungsabsicht der Abonnenten dar.
Eindeutig geklickt & URL-Rewrite-Engine
Jeder Standard-Hyperlink im E-Mail-Text wird so umgeschrieben, dass er über /track/click.php geleitet wird, wobei Kontakt-ID, Campaign-ID, Ziel-URL und Zeitstempel protokolliert werden, bevor der Abonnent weitergeleitet wird. Um das Vertrauen der Abonnenten und gesetzliche Vorgaben zu wahren, sind Abmeldelinks (/unsubscribe.php) und Bestätigungslinks (/confirm.php) strikt von Tracking-Weiterleitungen ausgenommen.
Abgemeldete Kontakte & Domain-Schutz
Misst Abonnenten, die sich entweder über den obligatorischen E-Mail-Footer-Link oder den RFC 8058 1-Klick List-Unsubscribe-Header abgemeldet haben. Eine gesunde Liste hält eine Abmelderate unter 0,5 %. Wenn die Raten 1,0 % übersteigen, warnt MarbleSend die Administratoren, die Listenqualität und Versandkadenz zu überprüfen, um zu verhindern, dass Postfachanbieter (Gmail, Yahoo, Outlook) die Domain-Reputation herabsetzen.
1.2 Betrieb & Worker-Zustands-Heartbeat
MarbleSend arbeitet mit einem einzigen Master-Hintergrundprozess: worker.php. Das Dashboard prüft cm_settings['worker_last_run'], um festzustellen, ob der Cronjob alle 60 Sekunden ausgeführt wird.
Aktiver Zustand (Cron gesund)
Wenn worker.php innerhalb der letzten 3 Minuten ausgeführt wurde, zeigt das Badge Aktiv an. Warteschlangen-Batches werden in Echtzeit verarbeitet, geplante Newsletter werden pünktlich ausgelöst und Autoresponder starten umgehend.
Inaktiver Zustand (Cron nicht erkannt)
Wird für > 3 Minuten kein Heartbeat verzeichnet, wird das Badge rot. Ein Klick auf die Karte führt direkt zu Settings → System mit dem exakten Crontab-CLI-Befehl und der Web-Cron-Fallback-URL.
Aktive Kontakte vs. Gesamtzielgruppe
Zeigt Kontakte mit aktivem Status im Verhältnis zur gesamten Abonnentenbasis an. MarbleSend setzt eine strikte 4-Stufen-Statusmaschine durch: active, pending (wartet auf Double-Opt-in-Bestätigung), unsubscribed und suppressed (Bounces/Beschwerden). Ausgehende Campaign-Worker filtern strikt nach WHERE status = 'active', sodass unbestätigte oder unterdrückte E-Mails niemals versendet werden.
Monatliches & Gesamtes Campaign-Volumen
Fasst die im aktiven Kalendermonat versendeten Broadcasts zusammen mit den gesamten Campaigns aller Zeiten zusammen. Bietet sofortige Transparenz über den monatlichen E-Mail-Marketing-Rhythmus und den operativen Ausstoß.
Auflösung des nächsten anstehenden Zeitplans
Fragt aktive wiederkehrende Zeitpläne ab (sortiert nach next_run_at ASC LIMIT 1) und zeigt den nächsten wartenden Newsletter sowie den Countdown an. Alle Ausführungszeiten werden strikt von SchedulerService::computeNextRun() mit vollständiger Zeitzonenunterstützung berechnet und in UTC gespeichert, wodurch Verschiebungen durch Sommerzeit (DST) ausgeschlossen werden.
Worker-Heartbeat & Shared-Hosting-Cron
Der System-Heartbeat prüft, ob worker.php innerhalb der letzten 180 Sekunden ausgeführt wurde. In Shared-Hosting-Umgebungen (cPanel, Hostinger) konfigurieren Sie die Crontab auf * * * * * php /pfad/zu/worker.php >/dev/null 2>&1. Falls kein CLI-Cron verfügbar ist, bietet MarbleSend einen sicheren Web-Cron-Fallback-Endpunkt (/cron.php?key=YOUR_KEY), der mit kostenlosen externen Pinger-Diensten wie cron-job.org kompatibel ist.
1.3 Campaign-Wachstums-Visualisierung
Die Wachstums-Visualisierung stellt die Volumenverteilung über vier wählbare Zeiträume dar: 7 Tage, 30 Tage, 90 Tage und Seit Jahresbeginn (YTD). Jeder Balken repräsentiert einen aggregierten Zeitabschnitt und zeigt beim Daraufzeigen die Anzahl der gesendeten und geöffneten E-Mails an.
Ermöglicht den sofortigen Wechsel zwischen kurzfristigem Wochenrhythmus (7 Tage), Monatszyklen (30 Tage), Quartalsergebnissen (90 Tage) und jährlichem Versandvolumen (Seit Jahresbeginn).
Wird mit reinem CSS-Flexbox basierend auf dem Höchstversandvolumen berechnet und gerendert. Vermeidet schwere JavaScript-Diagramm-Bibliotheken und lädt auf Mobilgeräten sowie Einsteiger-Hosting blitzschnell.
Beim Bewegen der Maus über einen Balken werden das exakte Zeitintervall, die Gesamtzahl der versendeten Nachrichten und das eindeutige Öffnungsvolumen angezeigt, was schnelle Vergleiche im Zeitverlauf ermöglicht.
Live-Versand & Heartbeat-Aktivitäts-Feed
Der Feed in der rechten Spalte zeigt kürzliche Campaign-Aussendungen in Echtzeit mit animierten Status-Badges (Completed, Sending pulsierend, Failed, Draft), Zustellquoten und einer dauerhaften System-Heartbeat-Statuskarte an.
status = 'completed'
status = 'sending'
status = 'failed'
status = 'draft'
Campaign-Historie & Zustell-Audit-Tabelle
Die untere Prüftabelle listet kürzliche Broadcast-Ausführungen mit vollständigen Metadaten auf: Campaign-Name, Lebenszyklus-Status, Herkunfts-Tag (manual, wiederkehrender Zeitplan, RSS-Feed oder erneuter Versand an Nicht-Öffner), Empfänger-Zustellverhältnis und verifizierte Öffnungsrate.
Zeigt den Betreff der Campaign, das Erstellungsdatum und das Herkunfts-Tag (manual, recurring, rss oder resend_unopened) an.
Sofortige Anzeige der zugestellten im Vergleich zu fehlgeschlagenen Nachrichten sowie prozentuale Live-Öffnungs- und Klickraten.
Direkte Verknüpfung zur Seite Campaign-Bericht für ereignisbasierte Protokolle auf Empfängerebene und das Modal zum erneuten Senden an Nicht-Öffner.
1.6 Schnellaktionen & Workflow-Automatisierung
Direkte Aktionsauslöser, die das Dashboard mit schnellen Arbeitsabläufen verbinden: automatisierte wiederkehrende Newsletter-Zeitpläne, RSS-zu-E-Mail-Verarbeitungspipelines, Abonnentenlisten-Erfassung, Double-Opt-in-Verifizierung und Unterdrückungsschutz.
Automationsfluss (Wiederkehrend & RSS)
Startet automatisierte E-Mail-Aussendungen nach festen Cron-Zeitplänen oder sobald ein verbundener WordPress/Ghost/Substack RSS-Feed neue Inhalte veröffentlicht, völlig ohne manuellen Eingriff.
Zielgruppen- & Abonnenten-Management
Ermöglicht schnellen Abonnenten-Import über CSV, segmentierte Listengruppierung, Durchsetzung von Double-Opt-in-Konformität und automatische Unterdrückung gebouncter oder abgemeldeter Adressen.
Campaign-Manager & Berichte (/campaigns)
Hochgeschwindigkeits-Broadcast-Editor, tag-basierte Empfängerauswahl, Preflight-Sicherheitsprüfung und detaillierte Zustellberichte.
Interactive Campaigns UI Inspector
Klicken Sie auf eine Komponente, um Schema-Auswirkungen und operative Tipps anzuzeigenLive-Versandmonitor
Echtzeit-Statistiken & EreignisseEmpfängerauswahl
Tag-Filterung & Alles auswählenDreifachansichts-Editor
Code, Split & VorschauPreflight-Prüfmodul
Automatisierte 6-Punkte-PrüfungTestversand-Diagnose
Warteschlangenfreie Live-StichprobeUTM- & Link-Rewriter
UTM-Parameter & 302-KlickverfolgungSendungsarchiv
Status- & UrsprungsfilterDetaillierter Nachversandbericht
CTR, MPP & automatischer Nachversand2.1 Live-Campaign-Monitor-Banner
Immer wenn ein Broadcast aktiv versendet wird, gleitet oben auf /campaigns ein fixiertes Monitor-Banner ins Blickfeld. Es fragt /api/campaigns/:id/progress alle 1,5 Sekunden ab, ohne die gesamte Seite neu zu laden.
Summer Launch Newsletter
Sending74% complete
7,420 / 10,000 emails
In Warteschlange
2,528
Wird gesendet
40
Erfolgreich
7,420
Fehlgeschlagen
12
Recent Events Real-time status
1,5-Sekunden-Polling-Engine
Fragt /api/campaigns/:id/progress alle 1,5 Sekunden asynchron ab und visualisiert den Durchsatz in Echtzeit ohne Seitenneuladen.
Strom aktueller Zustellungsereignisse
Live-Ereignisprotokoll, das die letzten 5 Empfängerstatusänderungen mit Zustellbestätigungen und SMTP-Fehlerdiagnosen in Echtzeit anzeigt.
Falls der Hintergrund-worker.php verzögert ist oder der Cron inaktiv ist, erscheint ein Warnhinweis mit Fehlerbehebungsanweisungen.
2.2 Empfängerauswahl & Tag-Filter (Linke Spalte)
Die linke Spalte ermöglicht ein punktgenaues Abonnenten-Targeting. Admins können nach benutzerdefinierten Kontakt-Tags filtern, nach Teil-E-Mail/Namen suchen und einzelne Kontakte auswählen oder auf Alle Passenden Auswählen klicken.
Zustandsautomaten-Filtergarantie:
Unabhängig von Auswahl oder Suche erzwingt die Abfrage-Engine strikt status = 'active'. Abgemeldete, ausstehende oder unterdrückte Kontakte werden automatisch aus der Warteschlange ausgeschlossen.
Multi-Tag-Schnittmengen
Wählen Sie bestimmte Abonnentensegmente anhand von Tags aus. Der Empfänger-Selektor berechnet Schnittmengenzahlen dynamisch in Echtzeit.
Verzögerte Live-Suche (300ms)
Echtzeitsuche zur Filterung von Kontakten nach Name oder E-Mail mit 300ms Debounce, um Lastspitzen bei großen Listen zu vermeiden.
Zentrale Auswahlsteuerung
Wählen Sie einzelne Kontakte aus oder nutzen Sie die Schaltfläche "Alles auswählen", um alle dem aktiven Filter entsprechenden Kontakte mit einem Klick zu erfassen.
Gruppen
Kontakte sind in Gruppen organisiert (ein Kontakt kann in mehreren sein; jeder Kontakt ist in mindestens einer, standardmäßig General). Wähle in Select Recipients „Nach Gruppe“, um an jeden aktiven Kontakt der gewählten Gruppen zu senden – die gesamte Gruppe, nicht nur die angezeigte Seite – oder „Manuell auswählen“, um einzelne Kontakte zu wählen (optional nach einer Gruppe gefiltert).
Gruppen können auch als Zielgruppe eines Zeitplans, als Auslöser einer Autoresponder-Regel, als Ziel einer Anmeldeseite und zur Eingrenzung eines erneuten Versands an Nicht-Öffner gewählt werden. Das Löschen einer Gruppe löscht nie ihre Kontakte; davon abhängige Autoresponder-Regeln werden deaktiviert.
2.3 Campaign-Editor & Split-Editor-Modi
Split-Modus
Gleichzeitige Codebearbeitung auf der linken Seite und responsive Live-Iframe-Vorschau auf der rechten Seite.
Nur-Code-Modus
Ablenkungsfreier HTML-Code-Editor in voller Breite mit Zeilennummern im Randbereich und syntax-Tabs.
Live-Vorschau-Modus
Sandboxed Rendering mit Umschaltmöglichkeiten für Desktop (100%), Tablet (600px) und Mobile (375px).
Platzhalter-Variablen & Ersetzungs-Engine
Personalisieren Sie E-Mails dynamisch über {{name}}, {{email}}, {{unsubscribe_link}}, {{offer_url}} und {{track_pixel}} Tags.
Isolierte responsive Viewports
Prüfen Sie responsive Ansichten für Mobilgeräte (375px), Tablets (600px) und Desktops (100%) vor dem Versand in einer isolierten Iframe-Sandbox.
2.4 Die automatisierte 6-Punkte-Preflight-Sicherheitsprüfung
Um katastrophale Fehler zu vermeiden (z. B. das Versenden von E-Mails mit fehlerhaften Platzhaltern, fehlenden Abmeldelinks oder Spam-Triggern), erfordert MarbleSend vor dem Start einen Preflight-Check.
| Sicherheitsprüfung | Schweregrad | Regel & Erkennung | Konsequenz bei Fehlschlag |
|---|---|---|---|
| 1. Abmeldelink | KRITISCH | Prüft auf das Vorhandensein des {{unsubscribe_link}}-tokens. | Senden ist BLOCKIERT. Vorgeschrieben gemäß CAN-SPAM, DSGVO und den Yahoo/Google-Absenderanforderungen von 2024. |
| 2. Platzhalter-Gültigkeit | KRITISCH | Erkennt unbekannte Platzhalter-Tags (z. B. Tippfehler wie {{first_nam}}). | Senden blockiert, bis unbekannte Tags korrigiert oder entfernt wurden. |
| 3. Empfänger-Zielgruppe | KRITISCH | Validiert, dass > 0 aktive Empfänger ausgewählt sind. | Broadcast an leere Auswahl nicht möglich. |
| 4. SMTP-Konnektivität | KRITISCH | Verifiziert Host und Zugangsdaten des ausgewählten SMTP-Profils. | Verhindert Warteschlangen-Stillstände durch ungültige Relay-Zugangsdaten. |
| 5. Spam-Signalwörter | WARNUNG | Durchsucht Betreff und Text nach Spam-Signalbegriffen ("100% free", "act now", "limited time"). | Warnbanner wird angezeigt; Admin kann prüfen und fortfahren. |
| 6. Betreffzeilenlänge | INFO | Empfiehlt 30–60 Zeichen für optimale Anzeige ohne Abschneiden auf mobilen Geräten. | Informativer Hinweis für höhere Öffnungsraten. |
Preflight-Verifikationsschranke
Prüft 6 automatisierte Sicherheitsregeln vor der Warteschlangenübergabe. Jeder kritische Fehler sperrt den Sende-Button.
2.5 Testversand-Diagnose & Bestätigungs-Modal
Bevor Tausende von E-Mails in die Warteschlange eingereiht werden, versendet die Schaltfläche Test-E-Mail senden sofort eine einzelne Testnachricht direkt an das Postfach des Administrators oder der Qualitätssicherung, ohne die Empfängerliste in der Datenbank zu berühren. Alle Platzhalter-Tags ({{first_name}}, {{email}}, {{unsubscribe_link}}) werden mit Vorschauwerten gefüllt, sodass Sie die E-Mail-Darstellung in Gmail, Apple Mail und Outlook prüfen können.
Testdaten-Interpolation
Füllt Abonnentenvariablen mit realistischen Vorschauwerten (z. B. Jane Doe, Testabmeldelink) für eine authentische optische Prüfung.
Startbestätigungs-Modal
Zweistufige Modaldialog-Bestätigung mit Anzeige von Empfängeranzahl, Absenderprofil und aktiven UTM-Tags vor der Warteschlangenerstellung.
2.6 Automatische UTM-Tracking-Injektion
Alle ausgehenden Link-Tags (<a href="...">) werden durch App\Services\TrackingInjector verarbeitet. UTM-Parameter (utm_source, utm_medium, utm_campaign, utm_content) werden automatisch angehängt, bevor URLs für das Klick-Tracking verpackt werden. Mailto-Links, Tel-Links und Abmeldelinks bleiben unberührt.
Schritt 1: UTM-Abfrageinjektion
Hängt utm_source, utm_medium, utm_campaign und utm_content an jeden Hyperlink an, ohne vorhandene Parameter zu überschreiben.
Schritt 2: Tracking-Pixel-Einbettung
Bettet ein transparentes 1x1-GIF vor dem schließenden </body>-Tag ein, um Öffnungsereignisse beim Rendern im E-Mail-Client zu erfassen.
Schritt 3: 302-Klickweiterleitungs-Engine
Schreibt ausgehende URLs zu /track/click.php?h=... um, für Weiterleitungen mit Millisekunden-Latenz und Erfassung des ersten Klicks.
Strenge Konformitätsausnahmen
Abmelde-Links, mailto/tel-Links und Double-Opt-In-Bestätigungs-URLs sind streng von UTM und Klickweiterleitungen ausgenommen.
2.7 Campaign-Verlauf & Portfolio (/campaigns/history)
Das vollständige Verlaufsportfolio bietet Multi-Attribut-Filterung nach Herkunft (manual, recurring, rss, resend_unopened), Status (completed, sending, failed, draft) und Datumsbereich. Admins können mehrere Campaigns auswählen, um aggregierte CSV-Zustellprotokolle herunterzuladen.
Herkunfts-Tracking-Pipeline
Kategorisiert Sendungen nach Quelle: Manueller Composer, Wiederkehrende Zeitpläne, RSS-Blog-Trigger oder Nachversand-Klone.
Multi-Status-Filter & CSV-Export
Filtern Sie das Archiv nach abgeschlossen, sendend, fehlgeschlagen und Entwurf. Laden Sie detaillierte Zustellprotokolle mit einem Klick herunter.
Ein-Klick-Sendungsduplizierung
Klonen Sie vergangene Sendungen zurück in den Composer – inklusive vollständigem HTML-Layout, Subject-Zeile und Absendereinstellungen.
2.8 Analyseberichte & Funktion "An Nicht-Öffner erneut senden"
Optional: Wähle Gruppen, um nur an Nicht-Öffner aus diesen Gruppen erneut zu senden. Ein erneuter Versand geht nie über die Empfänger der ursprünglichen Campaign hinaus.
Unter /campaigns/:id/report präsentiert MarbleSend einen umfassenden Bericht nach der Campaign:
4 Bento-Leistungskennzahlen
Erfasst Gesendet-Volumen (100%), Zustellfehler, eindeutige Öffnungen mit Öffnungsrate und eindeutige Klicks mit CTR.
Stündliche Interaktionskurve
Visualisiert stündliche Öffnungsspitzen in den ersten 72 Stunden, um optimale Sendezeiten für Abonnenten zu ermitteln.
Gezielter Nachversand an Nicht-Öffner
Klont die Campaign für Abonnenten mit opened_at IS NULL, um mit neuem Subject 15–25% mehr Öffnungen ohne Mehrfachkontaktierung aktiver Leser zu erzielen.
Kontakte-Hub & Wachstums-Tools (/contacts)
Abonnenten-Lebenszyklus-Verwaltung, CSV-Import, DSGVO-Konformität, benutzerdefinierte Anmeldeseiten und Autoresponder.
Interaktiver Kontakte-UI-Inspector
Klicken Sie auf eine Komponente, um Schema-Auswirkungen und Betriebstipps anzuzeigen4-Status-Zustandsautomat
active/pending/unsub/suppSuch- & Filter-Engine
Tags, Status & DebounceAudit- & Einwilligungs-Drawer
IP, Zeitstempel & BouncesRFC 4180 CSV-Importer
50k Zeilen & DeduplizierungGehostete Lead-Capture-Seiten
Double-Opt-in & TrichterTag-Autoresponder
Ereignisbasierte Drip-RegelnMassenverwaltungs-Hub
Seitenübergreifende SegmentierungDSGVO-Datenschutz & Löschung
JSON-Export & vollständige Löschung3.1 Der 4-Zustands-Abonnenten-Zustandsautomat
MarbleSend führt einen strikten, einheitlichen Zustandsautomaten für alle Kontakte. Es gibt keine zusätzlichen booleschen Flags. Jede einzelne Sende-Pipeline filtert nach WHERE status = 'active'.
Aktiver Abonnent
Bestätigtes Opt-in, gültige E-Mail. Berechtigt zum Empfang von Campaigns, Zeitplänen und Autorespondern.
Double-Opt-In ausstehend
Über Double-Opt-In-Formular angemeldet, wartet auf Klick in der Bestätigungs-E-Mail. Bis zur Bestätigung von Broadcasts ausgeschlossen.
Abgemeldet
Hat auf den Abmeldelink geklickt. Wird nie wieder angeschrieben. Kann nicht manuell ohne erneutes explizites Opt-in reaktiviert werden.
Hard Bounce / Beschwerde
Dauerhaft unterdrückt aufgrund eines ungültigen Postfachs (5xx SMTP), einer Spam-Beschwerde oder manueller Admin-Unterdrückung.
| Status | Übergangsauslöser | Zielstatus | Auswirkung auf Campaign-Versand |
|---|---|---|---|
| active | Abonnent klickt auf Abmeldelink oder RFC 8058 Header | unsubscribed | Wird sofort von allen zukünftigen Broadcast- und Zeitplan-Warteschlangen ausgeschlossen. |
| active | Permanenter 5xx-SMTP-Bounce oder dritter aufeinanderfolgender Soft-Bounce | suppressed | Dauerhaft unter Quarantäne gestellt, um die Senderreputation der Domain zu schützen. |
| pending | Abonnent klickt auf Double-Opt-in-Token-Link | active | Wird auf active heraufgestuft; berechtigt zum Erhalt von Campaigns und Autorespondern. |
| suppressed | Manuelle Aufhebung der Unterdrückung durch den Administrator | active | Soft-Bounce-Zähler wird zurückgesetzt; Rückkehr in die aktive Versandwarteschlange. |
Architektur-Schutz: Keine parallelen booleschen Flags
MarbleSend erzwingt eine einzelne ENUM-Spalte (cm_contacts.status). Andere Plattformen leiden häufig unter Dateninkonsistenzen, wenn boolesche Flags wie is_active, is_unsubscribed und is_bounced kollidieren. In MarbleSend enthält jede Versandabfrage eindeutig WHERE status = 'active'.
3.2 Echtzeit-Filter, Suche & Zeilenaktionen
Die Kontakte-Tabelle bietet sofortiges reaktives Alpine.js-Filtern nach Tag-Pills, Abonnentenstatus (active, pending, unsubscribed, suppressed) und Freitext-Debounce-Suche über E-Mail sowie Vor-/Nachname.
Jeder Kontakt gehört zu mindestens einer Gruppe (standardmäßig General). Mit dem Gruppen-Filter grenzt du die Tabelle ein, mit „Gruppen verwalten“ legst du Gruppen an, benennst sie um oder löschst sie – das Löschen einer Gruppe löscht nie ihre Kontakte.
JSON-Tag-Speicherung & Normalisierung
Tags werden als normalisierte JSON-Arrays in cm_contacts.tags gespeichert. Sie sind schreibweisunabhängig, getrimmt und für schnelle Filterung indiziert.
Entprellte 300ms-Sofortsuche
Suchabfragen filtern simultan über E-Mail, Vorname und Nachname mit 300ms Debounce, um die Datenbanklast zu minimieren.
Serverseitige Paginierung & Skalierung
Blättert mühelos durch Listen mit über 50.000 Abonnenten mittels effizienter SQL LIMIT- und OFFSET-Abfragen mit minimalem Speicherverbrauch.
Name, benutzerdefinierte Metadaten und Tag-Chips direkt in der Zeile ohne Neuladen bearbeiten.
Einen Kontakt sofort unterdrücken, um ihn umgehend für alle Warteschlangen zu disqualifizieren.
Löscht Kontaktprofil, Protokolle und Warteschlangeneinträge gemäß DSGVO Artikel 17 dauerhaft.
3.3 Detail-Drawer, DSGVO-Audit-Trail & JSON-Export
Ein Klick auf eine Kontaktzeile öffnet die Audit-Seitenleiste. Sie zeigt Lebenszeit-Metriken (erhaltene E-Mails, Öffnungsrate, Klickanzahl), Opt-in-IP-Adresse, Opt-in-Zeitstempel, Anmeldeformular-Slug und eine 1-Klick-Schaltfläche DSGVO-JSON exportieren zur Erfüllung von Artikel 15 (Auskunftsrecht) und Artikel 20 (Datenübertragbarkeit).
Opt-in-Zeitstempel & Zustimmungsquelle
Erfasst das genaue Datum, die Uhrzeit und den Akquisitionskanal (Manuell, CSV-Import, Anmeldeseiten-Slug oder API) für rechtliche Prüfungen.
Erfassung der verifizierten IP-Adresse
Speichert die IP-Adresse des Abonnenten bei Formularübermittlung als unverzichtbaren Zustimmungsnachweis gemäß DSGVO und CAN-SPAM.
Historische Interaktionstelemetrie
Überwacht das kumulative Versandvolumen zusammen mit verifizierten Öffnungszeitstempeln zur Unterscheidung aktiver von inaktiven Abonnenten.
Automatische Soft-Bounce-Eskalation
Zählt aufeinanderfolgende temporäre Zustellfehler (X / 3). Nach dem dritten aufeinanderfolgenden Soft-Bounce wechselt der Status automatisch zu suppressed.
3.4 CSV-Importer & Spaltenzuordnung
Der Importer verarbeitet CSV-files mit bis zu 50.000 Zeilen. Er erkennt Trennzeichen (Komma, Semikolon, Tabulator) automatisch und bietet visuelle Dropdowns zur Spaltenzuordnung: E-Mail, Vorname, Nachname und Tags.
Wähle, welchen Gruppen die importierten Kontakte beitreten (General, falls keine). Bestehende Kontakte werden diesen Gruppen hinzugefügt; aus Gruppen, in denen sie schon sind, werden sie nie entfernt.
Speicherschonender segmentierter Upload
Verarbeitet Dateien mit bis zu 50.000 Zeilen in Transaktionsblöcken und hält den Speicherverbrauch selbst auf strengem Shared Hosting unter 32MB.
Automatische Trennzeichenerkennung & Mapping
Erkennt Kommas, Semikolons und Tabs automatisch, mit interaktiver Spaltenzuordnung für E-Mail, Vorname, Nachname und Tags.
Batch-Tagging & Post-Import-Audit
Weist allen Kontakten des Imports ein globales Tag zu und liefert einen genauen Bericht über eingefügte, aktualisierte und übersprungene Datensätze.
Duplikate überspringen
Behält bestehende Kontaktdaten und Tags bei. Es werden nur neue Zeilen eingefügt.
Leere Felder aktualisieren
Füllt fehlende Namen aus und hängt neue Tags an, ohne bestehende Daten zu überschreiben.
Alle überschreiben
Aktualisiert Namen und Tags vollständig gemäß dem eingehenden CSV-file.
3.5 Öffentliche Anmeldeseiten (/s/:slug)
Zu finden unter Tab 2 von Kontakte. Erstellen Sie eigenständige gebrandete Anmeldeseiten mit benutzerdefinierter Überschrift, Beschreibung, Feldbeschriftungen und Absende-Buttons. Funktionen umfassen:
Wähle die Gruppen, denen Abonnenten dieser Seite beitreten (General, falls keine). Später gelöschte Gruppen fallen automatisch weg.
Überwacht die aggregierten Impressionen aller aktiven Anmeldetrichter.
Berechnet das Verhältnis von Eintragungen zu Aufrufen über alle gehosteten Formulare.
Zeigt die aktiven Landingpages im Verhältnis zum großzügigen Limit von 20 Seiten an.
Erfasst neue Abonnenten, die innerhalb des aktuellen 30-Tage-Fensters gewonnen wurden.
Mehrkanal-Einbettungsintegration
Binden Sie Formulare flexibel ein: über direkte gehostete URLs (/subscribe?slug=...), reinen HTML-Code, responsive iframes oder JS-Modalfenster.
Generiert HMAC-signierte Bestätigungs-tokens mit automatisiertem Versand von Bestätigungs-E-Mails.
Weist bei der Anmeldung festgelegte Abonnenten-Tags zu, um maßgeschneiderte Drip-Sequenzen auszulösen.
Leitet neue Abonnenten nach dem Opt-in auf Ihre Dankesseite oder Lead-Magnet-URL weiter.
3.6 Autoresponder & Drip-Sequenzen
Zu finden unter Tab 3 von Contacts. Richte automatische Willkommens-E-Mails ein, die in die Warteschlange gestellt werden, sobald ein neuer Abonnent aktiv wird – direkt nach der Anmeldung oder nach Bestätigung des Double Opt-in. Eine Regel passt auf ein Tag oder eine Gruppe; eine Verzögerung gibt es nicht. Die E-Mails werden vom Hintergrund-Worker zugestellt und beachten Suppression-Regeln automatisch.
Eine Regel kann statt auf ein Tag auf eine Gruppe reagieren. Gruppenregeln laufen, wenn ein neuer aktiver Kontakt in dieser Gruppe angelegt wird oder per E-Mail bestätigt – nicht, wenn ein bestehender Kontakt später zur Gruppe hinzugefügt wird (wie bei Tag-Regeln). Das Löschen der Gruppe deaktiviert die Regel.
Tag-basierter Ereignis-Listener
Wird ausgelöst, wenn ein neuer aktiver Abonnent das Tag der Regel trägt oder zu ihrer Gruppe gehört – direkt nach einer Anmeldeseite, einem API-Aufruf oder einem manuellen Hinzufügen (Single Opt-in) oder sobald das Double Opt-in bestätigt ist. Nicht bei CSV-Importen und nicht, wenn einem bestehenden Kontakt später ein Tag oder eine Gruppe hinzugefügt wird.
Dediziertes SMTP-Routing
Leitet transaktionale Begrüßungs-Mails über dedizierte SMTP-Profile mit hoher Reputation, getrennt von Massen-Newslettern.
Asynchrone Worker-Ausführung
Überträgt Rendering und Versand an worker.php, wodurch Web-Timeouts verhindert und blitzschnelle Formularantworten sichergestellt werden.
Schleifenschutz & Deduplizierung
Verhindert Mehrfachauslösungen, sodass Abonnenten keine doppelten Willkommensnachrichten erhalten, selbst wenn Tags mehrfach vergeben werden.
3.7 Massenverwaltung & Listensegmentierung (/contacts/list)
Unter /contacts/list verwalten Sie umfangreiche Listen mit Batch-Operationen: seitenübergreifend auswählen, Tags im Batch zuweisen oder entfernen, Tausende inaktive Kontakte gleichzeitig unterdrücken oder gezielte Segmente in UTF-8 CSV-files exportieren.
„Zur Gruppe hinzufügen“ und „Aus Gruppe entfernen“ gelten für alle ausgewählten Kontakte. Wird ein Kontakt aus seiner letzten Gruppe entfernt, kommt er zurück zu General.
Massen-Hinzufügen von Tags
Fügt Tags zu allen ausgewählten Kontakten in einer einzigen Abfrage hinzu, ohne bestehende Tags zu überschreiben.
Massen-Entfernen von Tags
Entfernt bestimmte Tags präzise von ausgewählten Kontakten über mehrere Verteiler hinweg.
Gefilterter CSV-Export
Exportiert gefilterte Empfängergruppen direkt in standardkonforme RFC 4180 CSV-Dateien inklusive vollständiger Metadaten.
Massensperrung (Suppression)
Quarantänisiert inaktive oder riskante Kontakte sofort, um die Absenderreputation zu schützen.
Massen-Abmeldung
Verarbeitet gesammelte Abmeldeanfragen aus externen Kanälen oder Offline-Campaigns.
Vollständige DSGVO-Löschung
Entfernt Kontaktdaten und zugehörige Telemetrielogdateien unwiderruflich gemäß Artikel 17 DSGVO.
3.8 DSGVO-Datenschutz, Audit-Export & Löschstandards
Integrierte Datenschutzfunktionen, die strikt der europäischen Datenschutz-Grundverordnung (DSGVO), dem CCPA und CAN-SPAM entsprechen.
Der GDPR-Export (JSON) listet außerdem die Gruppen auf, zu denen der Kontakt gehört.
Artikel 15 & 20: Strukturierter JSON-Export
Erstellt ein vollständiges, maschinenlesbares JSON-Dossier mit Abonnentenprofil, Einwilligungs-IP, Opt-in-Zeitstempeln und Versandprotokollen.
Artikel 17: Recht auf Löschung (Hard Delete)
Die dauerhafte Löschung wirkt kaskadierend auf cm_contacts, cm_email_logs und cm_email_queue und vernichtet alle personenbezogenen Daten.
Sicherheitsbarriere bei Entsperrung
Erfordert eine ausdrückliche Bestätigung des Administrators zur Wiederzulassung gesperrter Adressen, um Fehlversand an ungültige Postfächer zu vermeiden.
Vorlagen-Studio & KI-Texter (/templates)
8 E-Mail-sichere Tabellenlayouts, Sandbox-iframe-Vorschau mit Miniatur-CSS-Reset und ein verkaufsorientierter KI-Texter sowie Markdown-News-Beiträge für Newsletter.
Templates Studio UI-Inspektor
Klicken Sie auf eine Komponente, um Datenbankabfragen, Schema-Auswirkungen und Betriebs-Tipps anzuzeigenTemplate-Bibliothek
Echtzeitsuche & Slug-SchlüsselStarter-Layouts
8 tabellenbasierte E-Mail-LayoutsReiner Code-Editor
Tab-Einrückung & FormatiererIsolierter Viewport
Desktop- & Smartphone-RahmenDynamische Token-Palette
1-Klick-Placeholder-EinfügungTest-E-Mail-Absender
Live-SMTP-PrüfungsmodalAI-Copywriter-Drawer
Templates generieren & verfeinernBetreff-Prüfer
1–100 Punkte & Spam-AuditNews-Beiträge
Markdown-Artikel für Newsletter4.1 Template-Bibliothek, Eigene Slugs & Metadaten-Verwaltung
Zentraler Speicher für alle Marketing-, Transaktions- und Autoresponder-Templates. Mit clientseitiger Sofortsuche, unveränderlichen URL-Slugs und Live-Entwurfsanzeige.
Unveränderliche Template-Slugs
Slug-IDs (#monthly-newsletter) werden beim Erstellen vergeben und beim Speichern gesperrt. Dadurch bleiben automatisierte RSS-Campaigns und Autoresponder verlässlich intakt.
Schnelle Entprellte Suche
Schneller Alpine-Filter im Browser durchsucht Template-Namen, Betreffzeilen und Slug-IDs ohne unnötige Datenbankabfragen.
Live-Entwurfsstatus-Synchronisation
Eine gestrichelte Hinweis-Karte hebt aktive Entwürfe im Speicher optisch von gespeicherten Produktions-Templates ab.
Unabhängige Campaign-Snapshots
Das Bearbeiten oder Löschen eines Bibliotheks-Templates ändert niemals vergangene Sendungen. Versendete Campaigns sichern separate statische HTML- und Betreff-Snapshots in cm_campaigns.
4.2 8 Erprobte Tabellenbasierte Responsive Starter-Layouts
Klassische Desktop-E-Mail-Programme (insbesondere Microsoft Outlook mit Word-HTML-Rendering) unterstützen kein CSS Grid oder Flexbox. MarbleSend liefert 8 responsive Layouts auf Tabellenbasis für Gmail, Outlook, Apple Mail und Yahoo:
Leere Vorlage mit erforderlichem Abmelde-Footer.
Hero-Banner, Leistungsversprechen, markanter CTA.
Kuratierter Leitartikel, 2-spaltige Beitrags-Highlights.
Kopfband plus der {{news_posts}}-Block für Zeitpläne mit News-Beiträgen.
Persönliches Onboarding, 3-Schritte-Einstieg.
Datums-/Uhrzeit-Badge, Referenten-Biografie, RSVP-Button.
Nummerierte Artikel, Lesezeit, Autoren-Tags.
Dringender Rabattgutschein, Loss-Aversion-Copy.
Verschachtelte Tabellenarchitektur & Inline-CSS
Jedes Starter-Layout basiert auf verschachtelten <table>-Elementen mit festen Pixelbreiten, null Padding/Spacing und Inline-CSS für maximale Stabilität.
4.3 Reiner HTML-Code-Editor & Sauberer Formatierer
Ein fokussierter Editor für E-Mail-Entwickler mit Tab-Einrückung, Live-Zeichenzähler und automatischer Bereinigung von überflüssigen Leerzeichen.
Tabulator-Einrückung im Textfeld
Die Tab-Taste fügt 2 Leerzeichen ein, statt den Fokus zu verschieben, und erleichtert die saubere Code-Strukturierung direkt im Browser.
1-Klick-Code-Formatierer ("Clean")
Bereinigt unregelmäßige Einrückungen, entfernt überflüssige Leerzeilen und ordnet Tabellen-Tags, ohne Inline-Styles zu beschädigen.
Größenüberwachung gegen Abschneiden
Der Zeichenzähler überwacht die Dateigröße. Ein HTML-Gewicht unter 102 KB verhindert das Abschneiden durch Gmail ("Message clipped").
Frei von WYSIWYG-Code-Ballast
Direkte HTML-Kontrolle verhindert unnötige CSS-Klassen, nicht unterstützte Webfonts und versteckte Spans, die die E-Mail-Zustellbarkeit beeinträchtigen können.
4.4 Isolierte Multi-Geräte Responsive Viewports
Simuliert Desktop- und Mobil-Clients in einer isolierten Iframe-Sandbox, schützt die Admin-Oberfläche vor Style-Konflikten und bietet sofortiges Feedback.
Iframe-Sicherheit & CSS-Isolierung
Das Attribut sandbox="allow-same-origin" schirmt die E-Mail-Styles ab, sodass keine CSS-Regeln in das Admin-Interface von MarbleSend übergehen.
Umschalter Desktop vs. 320px Mobilansicht
Wechseln Sie blitzschnell zwischen voller Desktop-Breite und einem realistischen 320px-Smartphone-Rahmen, um einspaltiges Verhalten zu prüfen.
Echtzeit-Betreffzeilen-Simulation
Die obere Leiste zeigt den generierten Betreff in Echtzeit an, inklusive der Vorschau ersetzter Personalisierungs-Platzhalter.
Dynamischer Syntax-Warnhinweis
Prüft den Entwurf automatisch und blendet eine Warnung ein, wenn ungeschlossene Platzhalter oder ungültige Tokens gefunden werden.
4.5 Dynamische Personalisierungs-Tokens & RFC-Konformität
Beim Versand ersetzt die Template-Engine Tokens dynamisch durch Empfängerattribute, sichere Tracking-Links, RSS-Artikelzusammenfassungen und News-Beiträge.
Vollständiger Name des Empfängers (Standardwert "there", falls leer)
E-Mail-Adresse des Empfängers
Obligatorischer 1-Klick-Abmeldelink nach RFC 8058
Double-Opt-In-Bestätigungs-URL für Anmeldeseiten
RSS-Postingschleife für automatisierte Newsletter-Ausgaben
Titel des angebundenen RSS/Atom-Feeds
Titel des zuletzt publizierten Blogbeitrags
Anzahl der neuen Feed-Einträge im Newsletter
Block mit News-Beiträgen für einen Newsletter-Zeitplan (Titelbild, Titel, Untertitel, Text)
Anzahl der News-Beiträge in diesem Versand
Titel des neuesten News-Beitrags in diesem Versand
Gesetzliche Vorschrift & Schutz der Zustellbarkeit
Jede Marketing-E-Mail muss {{unsubscribe_link}} enthalten. Sendungen ohne Abmeldemöglichkeit verstoßen gegen CAN-SPAM, GDPR und CASL und führen zur Domain-Sperrung.
4.6 Diagnose für Einzelnen Testversand & Vorabprüfung
Ein Dialogwerkzeug zum Versenden von Test-E-Mails an beliebige Adressen über ausgewählte SMTP-Profile vor dem finalen Versand.
Flexible SMTP-Profil-Auswahl
Senden Sie Testnachrichten über jedes konfigurierte SMTP-Profil, um SPF, DKIM und die Zustellbarkeit auf bestimmten Servern zu prüfen.
Synthetische Platzhalter-Ersetzung
Ersetzt Tokens automatisch durch realistische Beispieldaten (z. B. "John Doe"), um Formatierung und Layout exakt zu beurteilen.
Sofortiger Versand ohne Warteschlange
Umgeht die Hintergrund-Warteschlange (cm_email_queue) für eine direkte Auslieferung via MailerFactory mit unmittelbarer Statusmeldung.
Qualitätsprüfung für Posteingang & Dark Mode
Prüfen Sie Entwürfe direkt in Gmail, Outlook und Apple Mail auf korrekte Farbinversionen im Dark Mode und lesbare Typografie.
4.7 Konvertierende AI-Copywriting-Engine BYOK
Integrierter AI-Copywriter mit direktem BYOK-Betrieb (Bring Your Own Key) für die Erstellung und Verfeinerung zustellsicherer E-Mail-Templates ohne Proxy-Umwege.
Wesentliches Prinzip: Ausgabequalität hängt von Prompt & Modell ab
MarbleSend beschränkt Sie nicht auf einen einzelnen geschlossenen KI-Anbieter. Da die Generierung über Ihren konfigurierten BYOK-Provider erfolgt, hängen Template-Layoutqualität, Überzeugungskraft, HTML-Tabellen-Präzision und Betreff-Kritik grundlegend von zwei Variablen ab: der Spezifität Ihrer Prompt-Anweisungen und der Denkfähigkeit des gewählten LLM-Modells.
1. Prompt-Spezifität & Kontexttiefe des Nutzers
Das KI-Modell spiegelt die Klarheit und den Kontext Ihrer Anweisungen wider. Generische Prompts wie „Schreibe eine Werbe-E-Mail“ erzeugen gewöhnliche Texte. Für herausragende Ergebnisse geben Sie strukturierten Kontext an: Zielgruppe, Kernprobleme, Hauptangebot, Tonalität (z. B. dringend, dialogorientiert, geschäftlich) und eine klare Call-to-Action (CTA). Geben Sie im Tab „Template bearbeiten“ gezielte iterative Anweisungen (z. B. „zweiten Absatz kürzen“, „20 % Rabatt auf dem CTA-Button hervorheben“ oder „Callout-Box mit 3 Vorteilen hinzufügen“).
2. LLM-Modellklasse & Denkvermögen
Unter Settings → AI Providers können Sie führende Reasoning-Modelle (wie DeepSeek-V4.1-flash, Claude 5 Sonnet oder GPT-6) oder leichtgewichtige lokale Modelle (wie 7B–8B-Parameter via Ollama oder Groq) verbinden. Spitzenmodelle zeichnen sich durch komplexe, E-Mail-sichere HTML-Tabellenschachtelung, natürliche Platzierung von Personalisierungs-Token ({{name}}, {{email}}, {{unsubscribe_link}}) und nuanciertes Copywriting aus. Im Tab „Opsi Subject“ werden Live-Score (1–100), Spam-Risiko und Alternativvorschläge direkt vom aktiven Modell berechnet – stärkere Modelle liefern weitaus schärfere Kritiken und überzeugendere Varianten.
Eingebaute System-Prompt-Leitplanken von MarbleSend
Unabhängig von Prompt-Länge oder Modellwahl injiziert AiService.php strenge E-Mail-sichere Architekturregeln: responsive Einzeltabellen-Struktur (max. 600px Breite, sauberer Hintergrund, kontrastreiche Karten), tabellenbasierte Bulletproof-CTA-Buttons kompatibel mit Outlook und Gmail, null externe Bilder zum Schutz der Zustellbarkeit und obligatorische Einfügung des Tokens {{unsubscribe_link}} in der Fußzeile zur Einhaltung internationaler Vorschriften.
Komplette Template-Generierung
Erstellt vollständige, tabellenbasierte HTML-Layouts, abgestimmt auf Zielgruppe, Kernangebot, Tonalität und gewünschte Textlänge.
Kontextbezogene Optimierung
Analysiert das aktuelle Template im Editor und wendet gezielte Anpassungen an (z. B. "füge 3 Leistungsmerkmale hinzu" oder "formuliere den CTA dringlicher").
Interaktiver Vorher-/Nachher-Vergleich
Nebeneinanderliegende Iframes stellen Vorher- und Nachher-Versionen dar, sodass Änderungen visuell überprüft werden können, bevor sie übernommen werden.
So erhalten Sie API-Keys von den wichtigsten Providern
Sobald Sie Ihren API-Key und die gewünschte Modell-ID haben, richten Sie den Provider in MarbleSend wie folgt ein:
4.8 Interaktive AI-Betreffbewertung & Zustellbarkeits-Inspektor
Durchsucht die Betreffzeilen Ihrer Templates, bewertet Öffnungschancen, Spam-Risiken und mobile Längenbegrenzungen mit Vorschlägen in 1 Klick.
Laden aller Bibliotheks-Betreffzeilen
Erfasst alle Betreffzeilen aus cm_templates in einer Liste und hebt den Betreff des aktuell geöffneten Templates hervor.
Mehrdimensionale 1–100 Bewertung
Das aktive Sprachmodell bewertet Neugierde, Klarheit, Mehrwert und Dringlichkeit und ermittelt eine objektive Punktzahl von 100.
Prüfung auf Zeichenüberlänge & Spam-Begriffe
Warnt bei Überschreitung mobiler Zeichengrenzen (empfohlen <= 50 Zeichen) und erkennt Reizwörter wie "GRATIS", "DRINGEND $$$" oder übermäßige Satzzeichen.
Optimierte Konvertierungsvarianten
Schlägt alternative Betreffzeilen basierend auf Neugier, Vorteilen oder Verlustangst vor, die mit einem Klick in den Editor übernommen werden können.
News-Beiträge — Artikel im Substack-Stil für Newsletter
Schreiben Sie Artikel im Tab Beiträge unter Vorlagen (Markdown mit Live-Vorschau). Ein Newsletter-Zeitplan mit der Einstellung „News-Beiträge“ sendet jeden Beitrag mit dem Status Bereit genau einmal, den ältesten zuerst, indem er den Platzhalter {{news_posts}} seiner Vorlage füllt. Beiträge existieren nur in Ihrer E-Mail — es gibt keine öffentliche Seite.
Schreiben und auf Bereit setzen
Nutzen Sie die Symbolleiste oder reines Markdown. Ein Beitrag wird erst versendet, nachdem Sie ihn von Entwurf auf Bereit setzen.
Vorlagen-Platzhalter
Setzen Sie {{news_posts}} dorthin, wo die Artikel erscheinen sollen (die Starter-Vorlage „News-Beiträge-Newsletter“ enthält ihn bereits). {{news_posts_count}} und {{news_latest_post_title}} funktionieren im Betreff.
Zeitplan erstellen
Wählen Sie unter Zeitpläne Newsletter und dann Inhaltsquelle: News-Beiträge. Nur Beiträge, die ab diesem Zeitpunkt auf Bereit gesetzt werden, werden gesendet — Ihr Archiv wird nie erneut verschickt. Intelligente Unterdrückung wird nicht verwendet.
Sicher durch Design
Beitragstext wird als HTML maskiert, und nur https-Links und -Bilder sind erlaubt. Halten Sie jede E-Mail unter etwa 100 KB, damit Gmail den Abmeldelink nicht abschneidet — der Editor warnt Sie.
Der Beiträge-Arbeitsbereich im Überblick
Öffnen Sie Vorlagen und wechseln Sie zum Tab Beiträge. Links liegt die Bibliothek, rechts der Editor mit Live-Vorschau — das gleiche Layout wie im Vorlagen-Studio.
| Bereich | Was er tut |
|---|---|
| Bibliothek | Listet jeden Beitrag mit einem Entwurf- oder Bereit-Badge, der Anzahl der Versendungen und der letzten Änderung. Das Suchfeld filtert nach Titel und Untertitel; das Papierkorb-Symbol erscheint beim Darüberfahren. |
| Titel, Untertitel, Titelbild | Der Titel ist Pflicht (bis 255 Zeichen, eine Zeile). Der Untertitel (bis 500) wird darunter angezeigt. Ein Titelbild muss eine https-URL sein — alles andere wird beim Speichern abgelehnt. |
| Status-Schalter | Entwurf-Beiträge werden nie versendet. Beim Wechsel auf Bereit wird der Zeitpunkt festgehalten; dieser Zeitpunkt entscheidet, welche Zeitpläne den Beitrag senden dürfen. |
| Markdown-Editor | Die Symbolleiste (Überschrift, fett, kursiv, Link, Listen, Zitat, Trennlinie, Bild) fügt syntax um Ihre Auswahl ein. Ein Beitrag kann bis zu 100.000 Zeichen enthalten. |
| Live-Vorschau | Rendert den ungespeicherten Beitrag in der gewählten Vorlage mit demselben Code wie beim echten Versand und zeigt die E-Mail-Größe in KB. Platzhalter wie {{name}} verwenden Beispielwerte. |
| Platzhalter-Shortcut | Eine Schaltfläche unter dem Editor kopiert {{news_posts}}, damit Sie es in eine Vorlage einfügen können. |
Markdown-Referenz
Beitragstext wird in einer kleinen, sicheren Markdown-Teilmenge geschrieben. Alles außerhalb dieser Liste bleibt einfacher Text.
| Syntax | Ergebnis |
|---|---|
| ## Heading ### Smaller | Überschrift (Ebenen 1–3 werden zu E-Mail-sicheren Überschriften) |
| **bold** *italic* | Fett und kursiv |
| [text](https://example.com) | Link. Nur http-, https- und mailto-Adressen werden verlinkt; jedes andere Schema (etwa javascript:) bleibt einfacher Text. |
| - item 1. item | Aufzählungen und nummerierte Listen |
| > quote | Blockzitat |
| --- | Trennlinie |
|  | Bild. Nur https; fügen Sie immer eine kurze Beschreibung für Leser hinzu, die Bilder blockieren. |
| (blank line) | Absätze werden durch eine Leerzeile getrennt; ein einzelner Zeilenumbruch bleibt ein Zeilenumbruch innerhalb des Absatzes. |
| <script>alert(1)</script> | Rohes HTML wird nie interpretiert: Ein eingetipptes <script>- oder <img>-Tag wird als Text angezeigt. |
Die {{news_posts}}-Platzhalterfamilie
Fügen Sie diese in eine Vorlage ein; ein Zeitplan mit News-Beiträgen füllt sie beim Versand, bevor die üblichen Empfänger-Tokens wie {{name}} aufgelöst werden.
| Platzhalter | Wird zu |
|---|---|
| {{news_posts}} | Der Beitragsblock für diesen Versand: Titelbild, Titel, Untertitel und Text jedes Beitrags, der älteste zuerst. Im Vorlagentext erforderlich. |
| {{news_posts_count}} | Die Anzahl der Beiträge in diesem Versand, zum Beispiel 1. Funktioniert im Betreff und im Text. |
| {{news_latest_post_title}} | Der Titel des neuesten Beitrags in diesem Versand. Ideal für die Betreffzeile. |
Im Text erforderlich
Ein Zeitplan mit News-Beiträgen wird beim Speichern abgelehnt, wenn der Vorlagentext kein {{news_posts}} enthält; ein Durchlauf schlägt sicher fehl (Beiträge bleiben ausstehend), wenn die Vorlage später bearbeitet wird.
Nie als Rohtext versendet
Wird er anderswo verwendet — in einer manuellen Campaign, einem RSS-Zeitplan oder einem reinen Vorlagen-Zeitplan —, werden die Platzhalter durch leeren Text ersetzt, und die Campaign-Vorabprüfung warnt Sie vor dem Senden.
Personalisiert und getrackt
Beitragstext durchläuft die normale Pipeline: {{name}} in einem Beitrag wird pro Empfänger personalisiert, Links erhalten UTM-Parameter und Klick-Tracking, und der Abmeldelink in Ihrer Vorlage bleibt erhalten.
Lebenszyklus eines Beitrags
Jeder Beitrag durchläuft dieselben einfachen Status; das Badge in der Bibliothek zeigt immer den aktuellen.
Entwurf
Wird noch geschrieben. Wird nie versendet. Setzt man einen Bereit-Beitrag zurück auf Entwurf, wird sein Bereit-Zeitpunkt gelöscht.
Bereit
In der Warteschlange für den Versand. Ein Zeitplan sendet ihn nur, wenn er Bereit wurde, nachdem der Modus News-Beiträge dieses Zeitplans aktiviert wurde. Das erneute Speichern eines bereits bereiten Beitrags ändert seinen Platz in der Warteschlange nicht.
Versendet
Pro Zeitplan erfasst und in der Bibliothek als „Versendet 1ד angezeigt. Ein Zeitplan sendet denselben Beitrag nie zweimal, auch wenn Sie ihn danach bearbeiten.
Gelöscht
Entfernt den Beitrag und seinen Versandverlauf. Bereits zugestellte E-Mails sind nicht betroffen, und ein gelöschter Beitrag kann nicht wiederhergestellt werden.
E-Mail-Größe und Sicherheit
Beiträge tragen ihren vollen Text in der E-Mail — es gibt keine öffentliche Seite —, daher sind Größe und Sicherheit wichtiger als bei einem reinen Link-Digest.
Erst maskieren
Jedes eingegebene Zeichen wird als HTML maskiert, bevor Formatierung angewendet wird; Skripte und Tags erreichen so nie das Postfach eines Empfängers.
Nur https
Bilder und Titelbild müssen https sein. Links akzeptieren http, https und mailto. Andere Schemata werden als einfacher Text angezeigt.
Unter etwa 100 KB bleiben
Gmail kürzt Nachrichten über etwa 102 KB und blendet die Fußzeile samt Abmeldelink aus. Die Vorschau zeigt die Größe in KB und warnt ab 80 KB; wählen Sie bei langen Artikeln wenige Beiträge pro E-Mail.
Kein öffentliches Archiv
Beiträge existieren nur in den E-Mails, die Sie senden. Es gibt keine Webseiten, keine Bild-Uploads und keine automatischen KI-Aufrufe — Bilder werden per URL verlinkt.
Schnelle Fehlerbehebung
| Symptom | Was zu prüfen ist |
|---|---|
| Die Vorschau zeigt keine Artikel | Die gewählte Vorlage enthält keinen Platzhalter {{news_posts}} (in der Liste mit „ohne {{news_posts}}“ markiert). Wählen Sie eine andere Vorlage oder fügen Sie den Platzhalter hinzu. |
| Warnung „Große E-Mail“ | Kürzen Sie den Beitrag, entfernen Sie aufwendige Formatierung oder verringern Sie „Beiträge pro E-Mail“ im Zeitplan. |
| Ein Link ist nicht anklickbar | Schreiben Sie ihn als [text](https://…) mit einer http-, https- oder mailto-Adresse; andere Schemata bleiben Text. |
| Ein Bild erscheint nicht | Die Adresse muss mit https beginnen und öffentlich erreichbar sein. Manche Mail-Apps blockieren zudem externe Bilder, bis der Leser sie erlaubt. |
Schedules & RSS-Automatisierung (/schedules)
Wiederkehrende Newsletter-Versände (Vorlage oder News-Beiträge), interaktiver monatlicher Versandkalender, Taktungs-Engine, dynamische Zielgruppenansprache und automatische Blog-RSS/Atom-Campaigns.
UI-Inspektor für Zeitpläne, RSS & News-Beiträge
Klicken Sie auf eine Komponente unten, um Datenbankabfragen, Schema-Auswirkungen und Betriebs-Tipps anzuzeigen
Kalender & Monatsmatrix
Visuelle Zeitplan- & TaktungskarteWiederholungs-Engine
Täglich, wöchentlich, monatlich & benutzerdefiniertAutomatisierter Blog-Poller
Hash-Deduplizierung & CacheDynamische Empfänger
Tag-Abfrage zur exakten AusführungssekundeEreignis-Logs
Ausführungs-Audit & DuplikatschutzSofortstart Run Now
Sofortiger Versand ohne TaktungsverschiebungHosting-Optimierung
8 kuratierte BetriebsrichtlinienCron-Heartbeat & Sperre
Nicht-blockierende ParallelitätssperreNews-Beiträge-Modus
Newsletter im Substack-Stil5.1 Dual-Modus-Betrieb: Interaktiver Zeitplan-Manager & Kalenderansicht
MarbleSend bietet zwei synchronisierte Betriebsansichten für unterschiedliche Arbeitsabläufe: einen kompakten Bento-Grid-Manager (/schedules) und einen umfangreichen interaktiven Monatskalender (/schedules/list).
Dichte tabellarische & Bento-Ansicht
Zeigt alle wiederkehrenden Sendungen mit Countdown zum nächsten Lauf, Aktiv-Schaltern, Template-Vorschauen und direkten Ausführungs-Shortcuts.
Interaktives 7-Spalten-Kalenderraster
Stellt anstehende Lieferungen auf einem Standardkalender von Sonntag bis Samstag dar, inklusive Hervorhebung des aktuellen Tages, Monatswechsler und klickbaren Event-Chips.
Detail-Drawer für ausgewählte Zeitpläne
Sofortiger Inspektions-Drawer mit isolierten Template-Vorschauen in Sandbox-Umgebung, Wiederholungsspezifikationen, Empfänger-Tag-Regeln und Schnellsteuerungen.
5.2 Taktungs-Engine, Wiederholungsregeln & UTC-Zeitzonennormalisierung
Wiederkehrende Zeitpläne basieren auf SchedulerService::computeNextRun(), das manuelle Zeitstempelberechnungen durch präzise PHP DateTimeImmutable-Mathematik ersetzt.
Universelle UTC-Speicherung mit lokalisierter Anzeige
Alle next_run_at-Werte werden in UTC in cm_schedules gespeichert. Bei der Anzeige im Browser werden die Zeiten in die vom Administrator konfigurierte Anzeigezeitzone konvertiert, während die Lieferfenster der Empfänger erhalten bleiben.
Tägliche & wöchentliche Wiederholung
Unterstützung für tägliche Aussendungen zu festen Stunden oder bestimmte Wochentagsauswahlen (z. B. Dienstag- und Donnerstagmorgen) über interaktive Tages-Pills.
Monatliche Monatstag-Anpassung
Für monatliche Versendungen an den Tagen 29–31 passt MarbleSend die Ausführung in kürzeren Monaten automatisch an den letzten gültigen Tag an (z. B. 28./29. Februar).
Zeitzonen- & Sommerzeit-Erkennung (DST)
Nutzt native PHP DateTimeZone-Berechnungen, um sicherzustellen, dass Aussendungen auch über Sommerzeitgrenzen hinweg zur beabsichtigten lokalen Stunde ausgelöst werden.
5.3 Pipeline für automatisierte RSS- & Atom-Feed-Abfragen
MarbleSend stellt über natives SimpleXML und cURL eine direkte Verbindung zu Ihrem Blog oder Feed her und wandelt neue Artikel ohne externe Tools in automatisierte Campaigns um.
Dual-Format-Parser (RSS 2.0 & Atom 1.0)
Prüft automatisch das XML-Stammelement und extrahiert Titel, Inhaltszusammenfassungen, Permalinks und Veröffentlichungszeitstempel völlig ohne externe Bibliotheken.
Live-Feed-Diagnose vor dem Start
Die Schaltfläche "Test Feed" ruft die Feed-URL in Echtzeit ab, validiert das XML-Schema, überprüft HTTP-200-Antworten und zeigt eine Vorschau der letzten 3 Beiträge an.
Deduplizierung & Initialer Snapshot
Erfasst last_rss_item_id und Veröffentlichungsdaten. Bei der Erstellung registriert MarbleSend die neueste Beitrags-ID als Basiswert, um den rückwirkenden Versand historischer Archive zu verhindern.
5.4 Dynamische Empfängerauflösung & Zielgruppen-Targeting zur Laufzeit
Die Zielgruppe eines Zeitplans kann auch auf eine Gruppe beschränkt werden (mit einem Tag müssen beide passen). Wird die Gruppe gelöscht, wird der Zeitplan deaktiviert, statt stillschweigend an niemanden zu senden.
Im Gegensatz zu statischen Campaign-Snapshots ermitteln terminierte Aussendungen ihre Empfängerliste dynamisch genau in der Sekunde, in der das Ereignis ausgelöst wird.
Echtzeit-Empfängererweiterung
Abonnenten, die sich wenige Minuten vor dem geplanten Lauf registrieren oder Tags erhalten, werden automatisch ohne manuellen Listen-Re-sync in die Aussendung einbezogen.
Strikter Zustellbarkeits-Statusfilter
Die Versandabfrage erzwingt WHERE status = 'active' und schließt ausstehende, abgemeldete und gesperrte Kontakte bedingungslos aus wiederkehrenden Warteschlangen aus.
Tag-basierte Segmentisolierung
Unterstützt den Versand an alle aktiven Kontakte oder das Targeting bestimmter Zielgruppensegmente über JSON-Tag-Arrays (z. B. #weekly-digest, #customers).
5.5 Ereignis-Ausführungs-Logs, Audits & Die Einmalige Nachhol-Richtlinie
Jeder automatisierte Lauf erstellt einen unveränderlichen Audit-Datensatz in cm_schedule_occurrences, der Zeitstempel, Ergebnisse, Empfängerzahlen und Fehlerdaten dokumentiert.
3-Status-Ereignistelemetrie
Unterscheidet zwischen 'completed' (E-Mails eingereiht), 'skipped' (keine neuen RSS-Artikel) und 'failed' (SMTP-Abbruch, ungültiges Template oder Netzwerk-Timeout).
Idempotenzschutz mit einmaligem Nachholen
War der Cron-Worker über mehrere verpasste Laufzeiten inaktiv, führt MarbleSend bei Wiederaufnahme maximal EINE Nachholsendung durch und setzt next_run_at in die Zukunft.
Modal für Ausführungsverlauf & Audit
Klicken Sie in der Seitenleiste auf "View Execution History", um vergangene Läufe, Empfängervolumina und diagnostische Fehler-Logs direkt in der Benutzeroberfläche einzusehen.
5.6 Manuelle Ad-hoc-Versendungen ("Run Now") & Notfall-Übersteuerungen
Administratoren können den Countdown-Timer umgehen und eine außerplanmäßige Sendung jedes Zeitplans sofort über die Aktion "Trigger Send Now" auslösen.
Sofortige Warteschlangen-Kompilierung
Kompiliert das Template sofort, ermittelt aktive Zielgruppenmitglieder und überträgt Batches an cm_email_queue für den nächsten Worker-Zyklus.
Beibehaltung des regulären Zeitplans
Das Auslösen eines Sofortversands verschiebt oder verzögert den regulär geplanten Zeitstempel next_run_at nicht, sodass die Kalendertaktung intakt bleibt.
Diagnose- & Eilmeldungs-Nutzen
Ideal zum Testen der Template-Formatierung mit echten Abonnentendaten oder zum Versenden dringender Bulletins außerhalb regulärer Geschäftszeiten.
5.7 Ausfallsichere Worker-Parallelität, Überlappungsschutz & Nicht-blockierende Sperren
MarbleSend verfügt über einen Enterprise-Parallelitätsschutz, der speziell dafür entwickelt wurde, doppelte Aussendungen auf kostengünstigen Shared-Hosting-Umgebungen zu verhindern.
Nicht-blockierende flock-Parallelitätssperre
worker.php fordert eine exklusive flock-Sperre auf storage/worker.lock an. Läuft eine vorherige Ausführung über latenzbehaftete SMTP-Relays noch, beenden sich Folgeaufrufe lautlos.
Protokollparität für Doppel-Worker
Sowohl CLI worker.php als auch HTTP cron.php teilen identische Ausführungspfade und Sperrmechanismen, was konsistentes Verhalten zwischen cPanel-Cron und Webhooks gewährleistet.
Atomare Ereignisreservierung
Fällige Zeitpläne werden mithilfe atomarer vorbereiteter PDO-Statements reserviert, wodurch doppelte Warteschlangeneinträge selbst in Multithread-Containerumgebungen ausgeschlossen sind.
5.8 Shared-Hosting-Leistungsoptimierung & Die 8 kuratierten Tipps
Die dynamische Optimization Tip-Karte auf der Seite Schedules bietet 8 praxiserprobte operative Empfehlungen für eine zuverlässige Zustellung auf Shared-Hosting-Servern:
Planen Sie Aussendungen dienstags oder donnerstags zwischen 09:00 und 10:30 Uhr Ortszeit der Empfänger für maximale Öffnungs- und Klickraten.
Führen Sie worker.php jede Minute (* * * * *) mit flock-Schutz aus, um sekundengenaue Taktung ohne Prozesskollisionen zu gewährleisten.
Fragen Sie cm_email_queue mit indexierten vorbereiteten Statements samt LIMIT-Klausel ab, um Race Conditions bei Lastspitzen auszuschließen.
Segmentieren Sie Kontakte nach Regionen (#us-east, #apac, #emea) und weisen Sie gestaffelte Zeitpläne zu, um E-Mails nicht um 3:00 Uhr nachts zuzustellen.
Planen Sie RSS-Aussendungen 1–2 Stunden nach der Blog-Veröffentlichung im CMS, damit CDN-Edge-Nodes und XML-Caches vollständig aktualisiert werden können.
Bereinigen Sie ältere Ausführungs-Logs aus cm_schedule_occurrences in Intervallen, um Tabellengrößen schlank und Abfrage-Indizes auf Shared Hosting schnell zu halten.
Planen Sie 48–72 Stunden später eine Nachfass-Kampagne an Kontakte mit opened_at IS NULL mit einer neuen Betreffzeile, um 15–25 % Engagement zurückzugewinnen.
Weisen Sie getrennte SMTP-Profile für automatisierte RSS-Feeds und volumenstarke Marketing-Versendungen zu, um die Sender-Reputation Ihrer Domain zu schützen.
5.9 Zeitpläne mit News-Beiträgen (Newsletter im Substack-Stil)
Ein Newsletter-Zeitplan kann jetzt Artikel statt einer festen Vorlage senden. Setzen Sie Inhaltsquelle auf „News-Beiträge“, und jeder Durchlauf liefert die nächsten Bereit-Beiträge aus Vorlagen → Beiträge, eingefügt über {{news_posts}} in die Vorlage. Wartet kein Beitrag, wird nichts gesendet.
Welche Inhaltsquelle sollte ich verwenden?
Nur Vorlage
Bei jedem Durchlauf dieselbe Vorlage — für wiederkehrende Ankündigungen oder Erinnerungen. Intelligente Unterdrückung ist verfügbar.
RSS-Digest
Neue Beiträge eines externen Blog-Feeds. Der erste Durchlauf markiert vorhandene Beiträge nur als gesehen; spätere Durchläufe senden nur neue Beiträge.
News-Beiträge
Artikel, die Sie in MarbleSend schreiben. Jeder Bereit-Beitrag wird einmal gesendet, der älteste zuerst. Ideal für einen Newsletter im Substack-Stil.
In sechs Schritten einrichten
- 1Öffnen Sie Vorlagen → Beiträge und schreiben Sie Ihren Artikel in Markdown.
- 2Erstellen oder öffnen Sie eine Vorlage und setzen Sie {{news_posts}} dorthin, wo die Artikel erscheinen sollen (die Starter-Vorlage „News-Beiträge-Newsletter“ enthält ihn bereits).
- 3Öffnen Sie Zeitpläne → Neu, lassen Sie den Typ auf Newsletter und setzen Sie Inhaltsquelle auf „News-Beiträge“.
- 4Wählen Sie Vorlage, Zielgruppe, SMTP-Profil, Beiträge pro E-Mail (1–20) und Taktung.
- 5Speichern. Nur Beiträge, die nach diesem Zeitpunkt Bereit werden, kann dieser Zeitplan senden.
- 6Markieren Sie den Beitrag als Bereit. Der nächste Durchlauf — oder Jetzt ausführen — sendet ihn.
Welche Beiträge bei jedem Durchlauf gesendet werden
Bei jedem Durchlauf wählt der Zeitplan Beiträge nach vier Regeln, in dieser Reihenfolge.
Nur Bereit
Entwürfe werden ignoriert, egal wie alt sie sind.
Nach dem Stichtag
Ein Beitrag muss Bereit geworden sein, nachdem der Modus News-Beiträge des Zeitplans aktiviert wurde. Ihr bestehendes Archiv wird nie erneut gesendet.
Von diesem Zeitplan noch nicht gesendet
Der Versand wird pro Zeitplan erfasst; zwei Zeitpläne können also denselben Beitrag je einmal senden, aber nie zweimal.
Älteste zuerst, bis zum Limit
„Beiträge pro E-Mail“ (Standard 1, maximal 20) begrenzt, wie viele kombiniert werden. Der Rest wartet auf den nächsten Durchlauf.
Was jeder Durchlauf protokolliert
Jeder Durchlauf erscheint im Zeitplan-Verlauf. Beiträge werden nur als zugestellt markiert, wenn ein E-Mail-Stapel wirklich in die Warteschlange gestellt wurde.
Gesendet
Eine Campaign wurde erstellt und eingereiht, zum Beispiel „1 post · 5 recipients queued“. Die Beiträge gelten als von diesem Zeitplan gesendet.
Übersprungen: keine neuen Beiträge
Es wartet kein Bereit-Beitrag. Nichts wird gesendet; der Zeitplan versucht es beim nächsten Durchlauf erneut.
Übersprungen: keine Empfänger
Die Zielgruppe war leer. Die Beiträge bleiben ausstehend und werden gesendet, sobald die Zielgruppe aktive Kontakte hat.
Fehlgeschlagen
Die Vorlage fehlt oder enthält kein {{news_posts}} mehr. Die Beiträge bleiben ausstehend; korrigieren Sie die Vorlage und führen Sie erneut aus.
Jetzt ausführen und Testversand
Jetzt ausführen
Ein echter Durchlauf, vom Worker innerhalb von etwa einer Minute ausgeführt. Sendet die ausstehenden Beiträge und markiert sie als zugestellt.
Test-Digest senden
Sendet die nächsten ausstehenden Beiträge — oder, falls keiner aussteht, den neuesten Bereit-Beitrag — über das eigene SMTP-Profil des Zeitplans an eine Adresse. Markiert nie etwas als zugestellt und teilt sich das Testlimit von 5 pro Minute.
Bearbeiten und pausieren
- Der Wechsel von Nur Vorlage zu News-Beiträge setzt in diesem Moment einen neuen Stichtag; der Wechsel zurück löscht ihn.
- Beim Speichern des Zeitplan-Formulars wird erneut geprüft, ob die Vorlage {{news_posts}} enthält. Pausieren und Fortsetzen schalten nur den Ein/Aus-Schalter um und prüfen das nie, sodass Sie immer pausieren können.
- Intelligente Unterdrückung wird im Modus News-Beiträge automatisch deaktiviert: Sie würde alle ausschließen, die eine frühere Ausgabe erhalten haben.
- News-Beiträge gibt es nur für Newsletter-Zeitpläne; RSS-Zeitpläne behalten ihre eigene Feed-Logik.
Die Zeitplan-Ansichten lesen
- Die Zeitplanliste kennzeichnet diese Zeitpläne als „News-Beiträge“ statt „Newsletter“.
- Das Detailpanel zeigt, wie viele Bereit-Beiträge für diesen Zeitplan warten.
- Im Formular werden Vorlagen ohne {{news_posts}} markiert, und eine Warnung erscheint, wenn Sie eine auswählen.
Schnelle Fehlerbehebung
| Symptom | Was zu prüfen ist |
|---|---|
| Mein Bereit-Beitrag wurde nicht gesendet | Prüfen Sie, ob er Bereit wurde, nachdem der Zeitplan gespeichert (oder auf News-Beiträge umgestellt) wurde, ob der Zeitplan aktiviert ist, und sehen Sie im Verlauf nach „no recipients“ oder „failed“. |
| Der Zeitplan meldet „no new posts“, direkt nachdem ich einen geschrieben habe | Der Beitrag ist vielleicht noch ein Entwurf oder wurde von diesem Zeitplan bereits gesendet. Öffnen Sie Vorlagen → Beiträge und prüfen Sie das Badge und „Versendet Nד. |
| Speichern nicht möglich: Vorlage muss {{news_posts}} enthalten | Fügen Sie den Platzhalter in den Vorlagentext ein (nicht nur in den Betreff) oder wählen Sie eine andere Vorlage. |
| Ich möchte einen alten Beitrag erneut senden | Kopieren Sie seinen Text in einen neuen Beitrag und markieren Sie diesen als Bereit — ein Zeitplan sendet denselben Beitrag nie zweimal. |
Settings & Infrastruktur (/settings)
SMTP-Multi-Relay-Verwaltung, Cron-Heartbeat, 23 Sprachen, Zustellbarkeitsdiagnose und Lizenzaktivierung.
UI Inspector für Einstellungen & Infrastruktur
Klicken Sie unten auf eine beliebige Komponente, um Datenbankschema-Auswirkungen, Hintergrundprozesse und Betriebsrichtlinien anzuzeigen
SMTP-Profile
BYO SMTP & Verwaltetes SES-RelayWorker & Cron
1-Minuten-Ausführungstakt23 Sprachen & Theme
RTL-Spiegelung & Dunkel/HellREST-API-Schlüssel
Berechtigter EntwicklerzugriffEreignis-Webhooks
HMAC-SHA256-Ereignis-PushZustellbarkeits-Suite
SPF, DKIM, DMARC & BIMIAI-Anbieter
BYOK & MarbleSend CreditsEd25519-Lizenz
Kryptografisches Grant-Token6.1 Dual-Zustellungsarchitektur: BYO SMTP & Verwaltetes Amazon SES-Relay
MarbleSend entkoppelt die Kampagnenausführung von Zustellrelais mit zwei Transportmodellen: (1) Bring Your Own (BYO) SMTP zur Anbindung eigener Mailserver und (2) MarbleSend SMTP via Amazon SES für sofortige Enterprise-Cloud-Zustellung ohne AWS-Konten oder IP-Aufwärmen. Kampagnen binden sich dynamisch an Profile mit nahtlosem Standard-Fallback und atomarer Guthabenabrechnung.
Verbinden Sie beliebige Standard-SMTP-Anbieter wie Postmark, Mailgun, Brevo, SendGrid, Resend oder Ihr cPanel-Postfach. Unterstützt Port 587 mit STARTTLS, Port 465 mit implizitem SSL/TLS und Port 25 für lokale Relais, mit benutzerdefinierter Authentifizierung und isolierten Absender-Headern.
6.1.1 SMTP-Server-Anbieter (Kostenlos, Kommerziell & Shared Hosting)
SMTP-Verzeichnis & VergleichVerbinden Sie Ihren eigenen Mail-Transport mit Standard-SMTP-Zugangsdaten. Wählen Sie zwischen Cloud-Relays oder Hosting-Mailboxen.
Standard-Shared-Hosting-Postfächer unterliegen strikten Limits (meist 100–500 E-Mails/Tag). Für Marketingkampagnen sollten Sie auf Business-Mail upgraden oder ein Cloud-Relay anbinden.
Optimiert für hohe Sendevolumina und erstklassige Zustellbarkeit.
| Anbieter / Website | Kostenloses Kontingent | Kommerzielle Preise | SMTP-Host & Port | Wichtige Regeln & Limits |
|---|---|---|---|---|
| Amazon SES (Direct) | Free tier on EC2 only (62k/mo); Otherwise pay-as-you-go | $0.10 / 1,000 emails ($1 per 10k) | email-smtp.<region>.amazonaws.com Port 587 (TLS) or 465 (SSL) |
Requires AWS account setup, IAM SMTP user credentials, and sandbox exit request. |
| Brevo | 300 emails / day (Free forever) | Starter from ~$9/mo (5k emails) to ~$18/mo (20k emails) | smtp-relay.brevo.com Port 587 (TLS) |
Free tier resets daily. Great for low-volume testing without entering a credit card. |
| Mailgun (Sinch) | Trial (5,000 emails for 30 days) | Foundation: $35/mo (50,000 emails); Scale: $90/mo | smtp.mailgun.org (or smtp.eu.mailgun.org) Port 587 (TLS) or 465 (SSL) |
Robust analytics and deliverability. Supports EU data residency. |
| Twilio SendGrid | 100 emails / day (Free forever) | Essentials: ~$19.95/mo (50k emails); Pro: ~$89.95/mo | smtp.sendgrid.net Port 587 (TLS) (User: apikey) |
Requires Two-Factor Authentication. Username must literally be apikey. |
| Postmark (ActiveCampaign) | Free Developer trial: 100 emails/mo | From $15/mo (10,000 emails), $55/mo (50,000 emails) | smtp.postmarkapp.com Port 587 (TLS) or 2525 |
Industry-leading transactional speed and strict spam filters. Separate broadcast streams required. |
| Resend | 3,000 emails / month (100 / day free) | Pro: $20/mo (50,000 emails/mo) | smtp.resend.com Port 465 (SSL) or 587 (TLS) (User: resend) |
Modern developer experience, clean UI, quick domain verification via DNS. |
Standard-cPanel-Postfächer eignen sich für geringes Volumen, sind aber für Massen-Mails stark reglementiert.
Business Email Plans (Per Mailbox)
1 GB storage, 1 forwarding rule, 1 alias, up to 100 mailboxes/domain. Standard webmail & antispam. Strict sending cap (~100-200/day).
5 GB storage, 5 forwarding rules, 5 aliases, expandable mailbox storage. No mailbox limit per domain.
20 GB storage, 20 forwarding rules, 10 aliases, AI Kodee mailbox assistant & smart replies.
50 GB storage, 50 forwarding rules, 30 aliases, full AI suite & priority deliverability.
Hostinger Reach (Email Marketing)
100 recipients, 200 emails / month. Suitable for basic transactional testing.
500 recipients, 500 emails / month, 10 AI credits, remove Reach branding, automations.
1,000 recipients, 7,000 emails / month, 20 AI credits, custom HTML code, send-time optimization.
• cPanel Shared: Max ~500 emails/hour per cPanel domain.
• Private Email: Starter (~$1.24/mo per mailbox, 5GB). Pro (~$2.82/mo, 30GB).
• SMTP Host: mail.privateemail.com (Port 465 SSL or 587 TLS).
• Shared cPanel: Default cap ~500 emails/hour. Internal mail system may defer large sudden bursts.
• Professional Email: Integrated with Microsoft 365 or Google Workspace ($2.99–$9.99/mo).
• SMTP Host: box###.bluehost.com or mail.yourdomain.com (Port 465 SSL).
• Site Tools Mail: Included in hosting (StartUp, GrowBig, GoGeek).
• Rate Limits: ~400 emails/hour on StartUp; up to ~800/hour on GoGeek. Strictly intended for transactional mail.
• SMTP Host: mail.yourdomain.com (Port 465 SSL).
• Paid Business Email: ~$1.99/mo per mailbox (25GB storage).
• Strict Outbound Policy: Maximum 100 recipients per hour. Mass marketing prohibited via shared SMTP.
• SMTP Host: smtp.dreamhost.com (Port 465 SSL or 587 TLS).
• cPanel Limit: Max 500 emails/hour per domain on shared plans.
• Workspace Option: Google Workspace addon ($6–$18/mo).
• SMTP Host: mail.yourdomain.com (Port 465 SSL or 587 TLS).
• M365 Reseller: Email Essentials from ~$1.99–$5.99/mo (10GB-50GB).
• SMTP Relay Note: Direct SMTP AUTH requires enabling Authenticated SMTP in the M365 Admin Portal.
• SMTP Host: smtp.office365.com (Port 587 TLS).
Wählen Sie den passenden Port und Sicherheitsstandard für Ihr Netzwerk.
The modern standard for email client-to-relay submission (RFC 6409). Starts in cleartext and immediately upgrades connection to TLS. Supported by almost all cloud relays.
Implicit TLS/SSL wrapper connection (RFC 8314). Required by Hostinger, Namecheap cPanel, and selected enterprise relays. Highly reliable when hosting firewalls restrict 587.
Server-to-server MTA routing. Almost universally blocked on cloud hosts (Hostinger, AWS, DigitalOcean, Hetzner, etc.) to combat spam. Do NOT use for outbound SMTP credentials.
6.1.1 Verwalteter Amazon SES-Relay & Eigene Absender-Domains
MANAGED SESEnterprise-Cloud-Zustellungsinfrastruktur, verwaltet von MarbleSend über api.marblesend.com. Eliminiert SMTP-Port-Blockaden, IAM-Anmeldeinformationsverwaltung und IP-Reputationsrisiken auf Shared Hosting. Bietet duale Absendermodi (Friendly From & Easy DKIM), kostenloses Starter-Guthaben, atomare Ledger-Prüfung und dynamische Skalierung bei Bedarf.
Vorkonfigurierte Amazon SES-Cloud-Zustellung, verwaltet von MarbleSend. Erfordert kein AWS-Setup, kein IAM-Management und kein IP-Aufwärmen. Laden Sie Guthaben nach Bedarf über unseren Zahlungsdienstleister auf, mit automatischer Synchronisierung und Echtzeit-Kontingenten.
Jede über MarbleSend SES versendete E-Mail reserviert atomar 1 Credit über die Warteschlangen-UUID (cm_addon_ledger.uq_addon_ledger_key). Schlägt die Übertragung fehl, wird die Reservierung sofort freigegeben und ohne manuelle Schritte erstattet.
Das Modal Test Connection führt einen Live-SMTP-Handshake und Testversand über MailerFactory durch. Es zeigt den Roh-Socket-Dialog in Echtzeit an, um Authentifizierungsfehler (535 Auth Failed), Relay-Verweigerungen (550 Relay Denied) und TLS-Timeouts sofort zu diagnostizieren.
Jede Kampagne, jeder Zeitplan oder Autoresponder kann über cm_campaigns.smtp_profile_id an ein isoliertes SMTP-Profil gebunden werden. Ist kein Profil zugewiesen, wird automatisch das Standardprofil (is_default = 1) verwendet.
Unabhängig von BYO SMTP oder MarbleSend SES muss Ihre Absender-Domain gültige SPF-, DKIM- und DMARC-Einträge aufweisen. Die integrierte 4-Säulen-Deliverability-Suite prüft Ihr DNS aktiv auf optimale Posteingangsplatzierung.
6.1.2 Versandregeln mit dem SES Relay
Amazon SES funktioniert nur für Absender mit sauberen Listen, deshalb setzt das MarbleSend-Relay diese Regeln selbst durch, nicht nur diese App. Sie lassen sich nicht abschalten und gelten für jede E-Mail über das SES Relay.
Vor dem ersten Versand füllen Sie Settings → SMTP → Absenderidentität & zulässige Nutzung aus: rechtlicher Name, Postanschrift, Land, Telefonnummer und Zustimmung zur Richtlinie zur zulässigen Nutzung. Der Versand bleibt gesperrt, bis alles gespeichert ist. Name und Anschrift stehen im Fuß jeder E-Mail; die Telefonnummer wird nie angezeigt.
Jeder Kampagnentext muss den Tag {{unsubscribe_link}} enthalten, sonst wird der Versand abgelehnt. Zusätzlich fügt das Relay die Header List-Unsubscribe und One-Click sowie einen Fuß mit Ihrem Namen, Ihrer Anschrift, einem Abmeldelink und „Sent with MarbleSend“ hinzu. Der Fuß lässt sich nicht entfernen.
Solange das SES Relay genutzt wird, verwenden Anmeldeseiten und die API immer double opt-in, die öffentliche Anmeldung verlangt Cloudflare Turnstile, und ein CSV-Import erfordert ein Häkchen, dass alle zugestimmt haben. Wer sich abgemeldet hat oder unterdrückt wurde, kann sich nicht über ein öffentliches Formular erneut anmelden.
Hard Bounces und Spam-Beschwerden erreichen MarbleSend automatisch und setzen den Kontakt auf unterdrückt. Das Relay sendet außerdem nicht an unterdrückte Adressen, und es wird kein Guthaben verbraucht. Soft Bounces werden wiederholt und unterdrücken einen Kontakt erst nach wiederholten Fehlern.
Jedes Konto hat ein tägliches Sendelimit (standardmäßig 2.000 E-Mails). Steigen Bounce- oder Beschwerderaten zu stark, pausiert der Versand automatisch, bis der Support das Konto prüft; er stoppt auch bei inaktiver Lizenz. Ein Hinweis unter Settings → SMTP nennt den Grund, und wartende E-Mails bleiben in der Warteschlange, statt verloren zu gehen.
E-Mails werden mit DKIM für marblesend.com (oder Ihre eigene verifizierte Domain) signiert. Der Return-Path nutzt mail.marblesend.com, sodass SPF ausgerichtet ist und DMARC besteht. Antworten gehen an die von Ihnen gesetzte Reply-To-Adresse.
Easy DKIM 3-CNAME-Einrichtungsverzeichnis (Multi-Anbieter)
Umfassender Leitfaden zur DNS-Konfiguration zum Hinzufügen der 3 AWS SES Easy DKIM CNAME-Einträge bei beliebten Hosting-Anbietern und Domain-Registraren, um häufige Syntaxfehler zu vermeiden und eine schnelle Verifizierung zu gewährleisten.
Universelle DNS-Architektur & Goldene Regeln
Easy DKIM delegiert die kryptografische Signierung über 3 CNAME-Einträge an Amazon SES. Da AWS die zugrunde liegenden 1024/2048-Bit-RSA-Schlüssel automatisch verwaltet und rotiert, ohne dass manuelle DNS-Updates erforderlich sind, müssen diese 3 CNAME-Einträge dauerhaft aktiv bleiben.
| Eintragstyp | Host / Name | Wert / Ziel / Verweist auf | TTL |
|---|---|---|---|
| CNAME | <token1>._domainkey.yourdomain.com | <token1>.dkim.amazonses.com | 300 (or Auto) |
| CNAME | <token2>._domainkey.yourdomain.com | <token2>.dkim.amazonses.com | 300 (or Auto) |
| CNAME | <token3>._domainkey.yourdomain.com | <token3>.dkim.amazonses.com | 300 (or Auto) |
Regel 1: Vorsicht vor der "Doppel-Domain"-Falle
Die meisten Registrare und Hosting-Panels hängen Ihre Root-Domain automatisch an das Feld Host/Name an. Wenn Sie "token._domainkey.ihredomain.de" einfügen, löst der DNS-Server "token._domainkey.ihredomain.de.ihredomain.de" auf, wodurch die DKIM-Prüfung fehlschlägt. Tragen Sie immer nur "token._domainkey" ein, es sei denn, Ihr Anbieter verlangt explizit den vollständigen FQDN.
Regel 2: CNAME, nicht TXT
Im Gegensatz zu manuellem DKIM, das einen TXT-Eintrag mit statischem öffentlichem Schlüssel verwendet, nutzt Amazon SES Easy DKIM 3 CNAME-Einträge, die direkt auf token.dkim.amazonses.com verweisen. Wählen Sie nicht TXT als Eintragstyp.
Regel 3: Proxy-Modus & Cloudflare Grey Cloud
Wenn Sie Cloudflare oder einen HTTP-Proxy nutzen, müssen die 3 DKIM-CNAME-Einträge auf "Nur DNS" (Graue Wolke / Nicht-Proxy) gesetzt werden. HTTP-Proxying verschleiert das CNAME-Ziel und verhindert die kryptografische E-Mail-Verifizierung.
# Check resolution via dig (macOS / Linux): dig CNAME <token1>._domainkey.yourdomain.com +short # Check resolution via nslookup (Windows / PowerShell): nslookup -type=CNAME <token1>._domainkey.yourdomain.com
Hostinger (hPanel DNS-Zone)
hPanel DNS| Eintragstyp | Host / Name | Wert / Ziel / Verweist auf | TTL |
|---|---|---|---|
| CNAME | <token>._domainkey (hPanel auto-appends .yourdomain.com) | <token>.dkim.amazonses.com | 300 (or 14400) |
Melden Sie sich im Hostinger hPanel-Dashboard an und navigieren Sie zu Domains.
Wählen Sie Ihre Domain aus und klicken Sie in der linken Seitenleiste auf DNS / Nameserver.
Wählen Sie unter DNS-Einträge verwalten im Dropdown-Menü Typ den Eintrag CNAME.
Geben Sie im Feld Name NUR token._domainkey ein (hPanel hängt .ihredomain.de automatisch an).
Tragen Sie im Feld Ziel token.dkim.amazonses.com ein und belassen Sie die TTL bei 300 oder Standard (14400).
Klicken Sie auf Eintrag hinzufügen. Wiederholen Sie den Vorgang für alle 3 Tokens aus MarbleSend.
DreamHost (DreamHost Web Panel)
DreamHost Web Panel| Eintragstyp | Host / Name | Wert / Ziel / Verweist auf | TTL |
|---|---|---|---|
| CNAME | <token>._domainkey (DreamHost appends .yourdomain.com) | <token>.dkim.amazonses.com | Default |
Melden Sie sich im DreamHost Web Panel an und navigieren Sie zu Websites > Websites verwalten.
Suchen Sie Ihre Domain und klicken Sie auf DNS-Einstellungen (oder Domains > Domains verwalten > DNS).
Scrollen Sie nach unten zum Abschnitt "Benutzerdefinierten DNS-Eintrag hinzufügen" und klicken Sie auf Eintrag hinzufügen.
Tragen Sie im Feld Name token._domainkey ein (DreamHost zeigt .ihredomain.de automatisch an).
Setzen Sie Typ auf CNAME und tragen Sie token.dkim.amazonses.com im Feld Wert ein.
Klicken Sie auf Speichern / Eintrag hinzufügen. Wiederholen Sie dies für alle 3 Tokens.
Namecheap (Erweitertes DNS)
Advanced DNS| Eintragstyp | Host / Name | Wert / Ziel / Verweist auf | TTL |
|---|---|---|---|
| CNAME Record | <token>._domainkey (never paste root domain here) | <token>.dkim.amazonses.com | Automatic (or 1 min) |
Melden Sie sich bei Namecheap an, öffnen Sie die Domain-Liste und klicken Sie neben Ihrer Domain auf Verwalten.
Wechseln Sie oben auf der Seite zur Registerkarte Advanced DNS.
Klicken Sie im Bereich Host Records auf die rote Schaltfläche ADD NEW RECORD.
Wählen Sie CNAME Record aus dem Dropdown-Menü Type.
Geben Sie im Feld Host NUR token._domainkey ein (geben Sie niemals Ihren Domainnamen ein).
Geben Sie bei Target token.dkim.amazonses.com ein, setzen Sie TTL auf Automatisch (oder 1 min) und klicken Sie auf das grüne Häkchen ✓. Wiederholen Sie dies für alle 3 Einträge.
Bluehost (Account Manager / Zone Editor)
Bluehost DNS| Eintragstyp | Host / Name | Wert / Ziel / Verweist auf | TTL |
|---|---|---|---|
| CNAME | <token>._domainkey (Bluehost handles suffix automatically) | <token>.dkim.amazonses.com | 4 Hours (or Default) |
Melden Sie sich im Bluehost Account Manager an, klicken Sie auf Domains und wählen Sie Ihre Domain.
Navigieren Sie zum Tab DNS (oder öffnen Sie den cPanel Zone Editor bei Legacy-Hosting).
Scrollen Sie zum Abschnitt CNAME (Alias) und klicken Sie auf Eintrag hinzufügen.
Tragen Sie im Feld Host Record token._domainkey ein.
Geben Sie bei Verweist auf token.dkim.amazonses.com ein und wählen Sie die TTL (4 Stunden oder Standard).
Klicken Sie auf Speichern. Wiederholen Sie dies für die 2 verbleibenden CNAME-Tokens.
SiteGround (Site Tools DNS-Zonen-Editor)
Site Tools DNS| Eintragstyp | Host / Name | Wert / Ziel / Verweist auf | TTL |
|---|---|---|---|
| CNAME | <token>._domainkey (Site Tools appends .yourdomain.com) | <token>.dkim.amazonses.com | 1 hour (3600) |
Melden Sie sich im SiteGround-Kundenbereich an, gehen Sie zu Websites und öffnen Sie Site Tools für Ihre Domain.
Erweitern Sie in der linken Seitenleiste Domain und klicken Sie auf DNS-Zonen-Editor.
Wählen Sie unter Neuen Eintrag erstellen die Registerkarte CNAME.
Tragen Sie im Feld Name token._domainkey ein (Site Tools hängt .ihredomain.de automatisch an).
Tragen Sie im Feld Löst auf token.dkim.amazonses.com ein und belassen Sie die TTL bei 1 Stunde (3600).
Klicken Sie auf Erstellen. Wiederholen Sie dies für alle 3 Tokens.
HostGator (cPanel Zone Editor)
cPanel Zone Editor| Eintragstyp | Host / Name | Wert / Ziel / Verweist auf | TTL |
|---|---|---|---|
| CNAME | <token>._domainkey (cPanel automatically appends dot) | <token>.dkim.amazonses.com | 14400 (or 3600) |
Melden Sie sich im HostGator-Kundenportal an und starten Sie cPanel.
Klicken Sie im Bereich Domains auf Zone Editor.
Suchen Sie Ihre Domain und klicken Sie auf + CNAME-Eintrag (oder Verwalten > Eintrag hinzufügen).
Tragen Sie im Feld Name token._domainkey ein (cPanel ergänzt automatisch Ihre Domain mit einem Punkt am Ende).
Tragen Sie im Feld CNAME / Record token.dkim.amazonses.com ein.
Klicken Sie auf CNAME-Eintrag hinzufügen. Wiederholen Sie dies für alle 3 Tokens.
GoDaddy (Domain-Portfolio DNS)
GoDaddy DNS| Eintragstyp | Host / Name | Wert / Ziel / Verweist auf | TTL |
|---|---|---|---|
| CNAME | <token>._domainkey (never include root domain in GoDaddy) | <token>.dkim.amazonses.com | 1/2 Hour (or Default) |
Melden Sie sich in Ihrem GoDaddy-Konto an und öffnen Sie Meine Produkte.
Suchen Sie unter Domains Ihre Domain und klicken Sie auf DNS (oder die drei Punkte > DNS verwalten).
Klicken Sie im Bereich DNS-Einträge auf Neuen Eintrag hinzufügen.
Wählen Sie CNAME aus dem Dropdown-Menü Typ.
Geben Sie im Feld Name NUR token._domainkey ein (fügen Sie nicht .ihredomain.de hinzu!).
Tragen Sie bei Wert token.dkim.amazonses.com ein, wählen Sie TTL 1/2 Stunde (oder Standard) und klicken Sie auf Speichern. Wiederholen Sie dies für alle 3 Einträge.
Nach dem Speichern der 3 CNAME-Einträge dauert die DNS-Propagierung in der Regel 5–30 Minuten (bis zu 24–48 Stunden je nach TTL). Kehren Sie zu MarbleSend Einstellungen > SMTP zurück, öffnen Sie die Karte der benutzerdefinierten Domain und klicken Sie auf "DNS prüfen". Nach der Validierung durch Amazon SES wechselt der Status auf Verifiziert.
6.2 Worker-Hintergrund-Heartbeat, 1-Minuten-Cron & Concurrency Guard
MarbleSend versendet E-Mails im Hintergrund. Ein Cron-Job ist ein Zeitgeber in Ihrem Hosting-Panel, der MarbleSend jede Minute weckt, damit es Zeitpläne und Autoresponder ausführen, fehlgeschlagene Zustellungen wiederholen, Bounces einsammeln und eine lange Campaign weiterführen kann. Eine Campaign, die Sie senden, startet sofort, doch alles, was später geschehen muss, hängt von diesem Zeitgeber ab. Zeigt Settings → System den Status Cron nicht erkannt, fehlt der Zeitgeber, läuft nicht jede Minute oder zeigt auf den falschen Ort. Die drei Schritte unten beheben das.
Öffnen Sie Settings → System, suchen Sie Cron-Job-Befehl und klicken Sie auf Befehl kopieren. Die Zeile enthält bereits den richtigen folder und, wenn Ihr Server es uns mitteilt, das richtige PHP. Verwenden Sie sie genau so; die Beispiele weiter unten auf dieser Seite zeigen nur die Form einer Zeile. Meldet Settings, dass PHP nicht erkannt wurde, fragen Sie Ihren Anbieter nach dem PHP-Befehlszeilenpfad und ersetzen Sie das Wort php am Zeilenanfang.
Wählen Sie unten Ihren Anbieter. Menünamen ändern sich gelegentlich, suchen Sie also den ähnlichsten Eintrag. In jedem Panel muss der Job jede Minute laufen (* * * * *), und sein Befehl ist die Zeile aus Schritt 1. Plesk, DirectAdmin und andere Panels nennen es Scheduled Tasks oder Cron Jobs.
Hostinger (hPanel)
- Öffnen Sie hPanel → Websites → Dashboard Ihrer Website und klicken Sie in der Seitenleiste auf Cron Jobs.
- Stellen Sie Type auf Custom. (Der Typ PHP nimmt nur den Pfad einer .php file; Ihre Zeile enthält auch den PHP-Befehl.)
- Fügen Sie die Zeile aus Schritt 1 in Command to run ein.
- Stellen Sie den Zeitplan auf jede Minute oder geben Sie * * * * * ein.
- Klicken Sie auf Save. Der Job erscheint unter List of Cron Jobs, wo Sie auch seine letzte Ausgabe lesen können.
Hostinger führt Cron-Jobs in UTC aus. Der Single-Tarif erlaubt 2 Cron-Jobs; Premium und höhere Tarife haben kein Limit.
Namecheap
Öffnen Sie cPanel in Ihrem Namecheap-Hosting-Konto und folgen Sie dann diesen Schritten.
- Öffnen Sie cPanel und klicken Sie im Bereich Advanced auf Cron Jobs.
- Wählen Sie unter Add New Cron Job in Common Settings die Option Once Per Minute (* * * * *).
- Fügen Sie die Zeile aus Schritt 1 in Command ein.
- Klicken Sie auf Add New Cron Job. Der Job läuft ab jetzt jede Minute.
Namecheap erlaubt auf Shared-Servern keine Cron-Jobs, die häufiger als alle 5 Minuten laufen, und nicht mehr als 5 Cron-Jobs. Nutzen Sie unten Web-Cron, wenn Sie jede Minute brauchen.
Bluehost
- Melden Sie sich im Bluehost Portal an, klicken Sie auf Websites und dann auf Manage Site für Ihre Website.
- Öffnen Sie den Tab Advanced, suchen Sie Cron Jobs und klicken Sie auf Manage und dann auf Add Cron.
- Wählen Sie unter Common Settings eine Häufigkeit (oder füllen Sie Minute, Hour, Day, Month und Weekday aus).
- Fügen Sie die Zeile aus Schritt 1 in Command ein und klicken Sie auf Add.
Laut Bluehosts eigener Dokumentation führt Shared Hosting Cron-Jobs nur alle 15 Minuten oder seltener aus (eine Seite nennt 5 Minuten). Nutzen Sie unten Web-Cron, wenn Sie jede Minute brauchen.
HostGator
Öffnen Sie im Customer Portal Websites → Manage Site → Advanced, klicken Sie dann unter Cron Jobs auf Manage und Add Cron. Das Formular hat dieselben Felder wie cPanel, daher gelten die Schritte unten. Oder öffnen Sie cPanel → Advanced → Cron Jobs.
- Öffnen Sie cPanel und klicken Sie im Bereich Advanced auf Cron Jobs.
- Wählen Sie unter Add New Cron Job in Common Settings die Option Once Per Minute (* * * * *).
- Fügen Sie die Zeile aus Schritt 1 in Command ein.
- Klicken Sie auf Add New Cron Job. Der Job läuft ab jetzt jede Minute.
Die Hilfeseiten von HostGator nennen das kürzeste auf Shared Hosting erlaubte Intervall nicht. Wird jede Minute abgelehnt, nutzen Sie unten Web-Cron.
GoDaddy
Klicken Sie auf Ihrer GoDaddy-Produktseite neben Linux Hosting auf Manage, dann auf cPanel Admin und folgen Sie anschließend diesen Schritten.
- Öffnen Sie cPanel und klicken Sie im Bereich Advanced auf Cron Jobs.
- Wählen Sie unter Add New Cron Job in Common Settings die Option Once Per Minute (* * * * *).
- Fügen Sie die Zeile aus Schritt 1 in Command ein.
- Klicken Sie auf Add New Cron Job. Der Job läuft ab jetzt jede Minute.
Die Hilfeseiten von GoDaddy nennen das kürzeste erlaubte Intervall nicht. Wird jede Minute abgelehnt, nutzen Sie unten Web-Cron.
DreamHost
- Öffnen Sie das DreamHost-Panel, gehen Sie zu Cron Jobs und klicken Sie auf Add New Cron Job.
- Wählen Sie einen Benutzer (einen vorhandenen SFTP- oder Shell-Benutzer), geben Sie dem Job einen Titel und optional eine E-Mail-Adresse für seine Ausgabe an.
- Fügen Sie die Zeile aus Schritt 1 in Command ein. DreamHost legt PHP unter Pfaden wie /usr/local/php83/bin/php ab (verwenden Sie Ihre PHP-Version).
- Stellen Sie den Zeitplan ein und aktivieren Sie locking, damit sich zwei Läufe nie überlappen, und speichern Sie.
Bei benutzerdefinierter Zeitplanung lässt das Panel höchstens 12 verschiedene Minuten pro Stunde zu, der kürzeste regelmäßige Zeitplan ist daher alle 5 Minuten. Die Zeiten gelten in Pacific Time. Nutzen Sie unten Web-Cron, wenn Sie jede Minute brauchen.
SiteGround
- Öffnen Sie Site Tools → Devs → Cron Jobs.
- Wählen Sie das Intervall aus der Liste (oder legen Sie Minute, Stunde, Tag, Monat und Wochentag fest).
- Fügen Sie die Zeile aus Schritt 1 in Command ein. Eine E-Mail-Adresse für die Ausgabe ist optional.
- Klicken Sie auf Create.
Die Dokumentation von SiteGround zeigt Voreinstellungen wie Twice Per Hour und nennt kein kürzestes Intervall. Hat Ihr Tarif keine Option für jede Minute, nutzen Sie unten Web-Cron.
- Öffnen Sie Settings → System und kopieren Sie die Web-Cron URL. Halten Sie sie geheim: Sie enthält Ihr geheimes Token.
- Erstellen Sie ein kostenloses Konto bei einem Cron-Dienst wie cron-job.org.
- Legen Sie einen Job an, fügen Sie die URL ein und stellen Sie ihn auf jede Minute. Speichern und aktivieren Sie ihn.
- Nutzen Sie entweder Web-Cron oder einen Cron-Job Ihres Anbieters, nicht beides: eines genügt.
Warten Sie ein bis zwei Minuten und laden Sie dann Settings → System neu. Die Anzeige sollte Aktiv lauten und Letzter Heartbeat eine Zeit aus der letzten Minute zeigen. Website-Gesundheit auf derselben Seite sollte den Worker als Bestanden zeigen. Erlaubt Ihr Anbieter nur alle 5 oder 15 Minuten einen Job, kann die Anzeige zwischen Aktiv und Cron nicht erkannt wechseln, weil sie einen Lauf innerhalb der letzten 5 Minuten erwartet; E-Mails gehen trotzdem bei jedem Lauf des Workers hinaus.
- Der PHP-Befehl ist falsch. Fragen Sie Ihren Anbieter nach dem PHP-Befehlszeilenpfad (zum Beispiel /opt/alt/php83/usr/bin/php bei Hostinger oder /usr/local/bin/php bei vielen cPanel-Anbietern) und ersetzen Sie php am Zeilenanfang.
- Nur ein Teil der Zeile wurde eingefügt. Fügen Sie die ganze Zeile ein, einschließlich >/dev/null 2>&1 am Ende.
- Der folder ist falsch. worker.php liegt in dem folder, der public enthält, nicht in public.
- Um den Fehler zu sehen, führen Sie den Job einmal ohne >/dev/null 2>&1 aus und lesen Sie seine Ausgabe. Ein funktionierender Worker gibt eine Zeile wie worker.php: processed=0 aus.
- Der Job gehört zu einer anderen Website im selben Konto. Prüfen Sie den folder im Befehl.
- Geben Sie ihm nach dem Speichern bis zu 5 Minuten, bevor Sie erneut prüfen.
Für technische Nutzer
E-Mail-Kompilierung, Zielgruppenabfragen, Versand und Webhook-Verarbeitung arbeiten asynchron über einen 1-minütigen Hintergrund-Worker. MarbleSend nutzt eine Dual-Entrypoint-Architektur (nativer CLI-Worker worker.php oder HTTP-cron.php), geschützt durch nicht-blockierende Dateisperren gegen Überlappungen auf Shared Hosting.
* * * * * php /home/USER/your-folder/worker.php >/dev/null 2>&1
Wird direkt von der Betriebssystem-Shell ausgeführt (* * * * * php /pfad/zu/worker.php >/dev/null 2>&1). Umgeht HTTP-Timeout- und Gateway-Grenzwerte vollständig, ideal für cPanel, Plesk und DirectAdmin.
GET https://your-domain.com/cron.php?token=SECURE_TOKEN
Für Hosting-Umgebungen ohne Shell-Crontab-Zugriff löst der Aufruf von GET /cron.php?token=SECURE_TOKEN über Drittanbieter-Dienste (wie cron-job.org oder UptimeRobot) dieselbe Warteschlangenverarbeitung sicher aus.
Der Worker sperrt storage/worker.lock mit flock(LOCK_EX | LOCK_NB) beim Start. Wenn ein vorheriger Durchlauf noch eine große Warteschlange verarbeitet, beenden sich nachfolgende Durchläufe sauber ohne Race Conditions.
Beansprucht Stapel von 50 Warteschlangenelementen atomar über indexierte Statusabfragen. Fehlgeschlagene Zustellungen unterliegen exponentiellem Backoff mit Wiederholungszählern bis max_attempts vor dem Fehlschlagstatus.
6.3 23 Native Sprachen, RTL-Arabisch & Administrator-Sicherheitsmaschine
MarbleSend ist als international zugängliche, selbst gehostete Plattform konzipiert. Es bietet 23 vollständig von Menschen kuratierte native Sprachwörterbücher, automatische Rechts-nach-Links-Layout-Spiegelung für Arabisch, persistente Tri-State-Theme-Anpassung und strenge Single-Tenant-Sicherheit.
Sprachdateien in app/lang/*.php sind reine PHP-Arrays, die in weniger als einer Millisekunde in den Speicher geladen werden, ohne gettext-Server-Binärdateien oder externe Übersetzungs-APIs.
Die Auswahl von Arabisch (ar) injiziert automatisch dir='rtl' in das HTML-Dokument und spiegelt Navigationsseitenleisten, Tabellenspalten, Drawer-Bereiche und Navigationssymbole in der gesamten Benutzeroberfläche.
Ermöglicht den nahtlosen Wechsel zwischen Dark Palette, Light Palette und Betriebssystem-Präferenz. Die aktive Auswahl wird in Cookies (marblesend_theme) gespeichert, um Layout-Verschiebungen beim Laden zu verhindern.
In cm_settings.admin_user gespeicherte Admin-Anmeldeinformationen werden mit bcrypt (Work-Faktor 12) verschlüsselt. Schützt vor Session Fixation durch automatische Session-ID-Regenerierung bei der Anmeldung.
6.3.1 Zwei-Faktor-Authentifizierung (TOTP) & QR-Code-Einrichtung
Die Zwei-Faktor-Authentifizierung fügt dem Admin-Konto ein zweites Schloss hinzu: Nach dem Passwort fragt MarbleSend nach einem 6-stelligen Code, der sich alle 30 Sekunden ändert und nur von Ihrem Smartphone erzeugt werden kann. Sie ist optional, in etwa einer Minute aktiviert und funktioniert mit jeder Standard-Authenticator-App wie Google Authenticator, Microsoft Authenticator, 1Password, Bitwarden, Authy oder Aegis. Sie finden sie unter Settings → Sprache & Konto → Zwei-Faktor-Authentifizierung (TOTP).
MarbleSend nutzt den offenen TOTP-Standard (RFC 6238: HMAC-SHA1, 6 Ziffern, 30-Sekunden-Schritte). Beim Aktivieren wird ein zufälliges Secret erzeugt, das einmalig mit Ihrer App geteilt wird. Danach erfordert die Anmeldung das Passwort und einen aktuellen Code. Ein bereits verwendeter Code kann nicht erneut genutzt werden, und der zweite Schritt läuft nach 5 Minuten ab.
1) Öffnen Sie Settings → Sprache & Konto und klicken Sie auf Aktivieren. 2) Wählen Sie in Ihrer Authenticator-App „QR-Code scannen“ und scannen Sie das Quadrat auf dem Bildschirm. 3) Geben Sie den 6-stelligen Code ein, den Ihre App jetzt anzeigt, und klicken Sie auf „Bestätigen und aktivieren“. 4) Speichern Sie die acht Wiederherstellungscodes, die nur einmal erscheinen: in einen Passwortmanager kopieren oder ausdrucken.
Das QR-Bild wird von Ihrer eigenen Installation als kleine Vektorgrafik gezeichnet; das Secret wird nie an einen Online-QR-Generator oder Dritte gesendet. Falls Sie nicht scannen können (z. B. weil die App auf demselben Smartphone läuft), nutzen Sie den Einrichtungsschlüssel oder den otpauth-Link unter dem QR-Code. Das Secret wird mit Ihrem ENCRYPTION_KEY verschlüsselt (AES-256-GCM) gespeichert, wie alle anderen Zugangsdaten.
Nach dem korrekten Passwort werden Sie nach dem 6-stelligen Code gefragt. Falsche Codes werden pro Konto begrenzt, Raten ist daher nicht praktikabel. Werden korrekt eingegebene Codes abgelehnt, prüfen Sie, ob Datum und Uhrzeit des Smartphones automatisch eingestellt sind; eine falsche Uhr erzeugt falsche Codes.
Beim Aktivieren der 2FA werden acht Einmalcodes erzeugt. Jeder funktioniert einmal im Codefeld anstelle des 6-stelligen Codes. Sie werden nur als Hashes gespeichert und können nicht erneut angezeigt werden; mit „Neue Wiederherstellungscodes“ (erfordert einen aktuellen Code) ersetzen Sie den gesamten Satz, wodurch die alten ungültig werden.
Der per E-Mail gesendete Link für ein vergessenes Passwort umgeht die Zwei-Faktor-Authentifizierung absichtlich nicht und hilft hier deshalb nicht. Führen Sie auf dem Server „php tools/reset-admin.php“ aus (SSH oder Hosting-Terminal): Das setzt das Admin-Passwort zurück, hebt Sperren auf, beendet alle Sitzungen und schaltet die 2FA aus; danach können Sie sie mit dem neuen Gerät erneut aktivieren. Zum normalen Ausschalten nutzen Sie Deaktivieren in derselben Karte (Passwort plus aktueller oder Wiederherstellungscode).
6.3.2 Anmeldeschutz (Cloudflare Turnstile): Ihre kostenlosen Schlüssel erhalten
Turnstile ist die kostenlose, datenschutzfreundliche CAPTCHA-Alternative von Cloudflare. Ist es aktiviert, prüfen Ihre öffentlichen Anmeldeseiten (die Formulare unter /s/ihre-seite und /subscribe), ob der Besucher ein Mensch ist, bevor ein Abonnement akzeptiert wird; das verhindert, dass Bots Ihre Liste und Ihre Bestätigungs-E-Mails fluten. Es arbeitet zusätzlich zum eingebauten Honeypot und zu den Limits pro IP und pro Adresse und ist optional, außer solange Sie über das SES Relay senden (siehe letzter Hinweis). Sie benötigen zwei Schlüssel, einen Site key (öffentlich) und einen Secret key (privat), aus Ihrem eigenen kostenlosen Cloudflare-Konto; Ihre Domain muss Cloudflare nicht für DNS nutzen.
Öffnen Sie dash.cloudflare.com und registrieren Sie sich (kostenlos) oder melden Sie sich an. Sie müssen Ihre Website nicht zu Cloudflare hinzufügen oder Ihr DNS ändern, um Turnstile zu nutzen.
Öffnen Sie im Dashboard-Menü „Turnstile“ (oder suchen Sie danach) und klicken Sie auf „Add widget“ (ältere Dashboards zeigen „Add site“). Menünamen ändern sich gelegentlich; suchen Sie Turnstile unter Application security.
Wählen Sie einen beliebigen Namen, z. B. „MarbleSend signup“. Tragen Sie unter Hostname die Domain ein, auf der MarbleSend läuft, ohne https:// und ohne Pfad, z. B. app.ihredomain.com. Werden Ihre Anmeldeseiten auf einer anderen Domain angezeigt, fügen Sie diese ebenfalls hinzu. localhost nur beim Testen auf Ihrem eigenen Rechner hinzufügen.
Wählen Sie Managed (empfohlen): Die meisten Besucher kommen ohne Rätsel durch, und Cloudflare verlangt nur bei verdächtigen Besuchen einen kurzen Klick. Non-interactive zeigt einen kurzen Fortschrittsbalken ohne Klick, Invisible zeigt gar nichts. Lassen Sie Pre-clearance ausgeschaltet und klicken Sie auf Create.
Cloudflare zeigt einen Site Key (öffentlich) und einen Secret Key (privat). Kopieren Sie beide. Das Secret nutzt nur Ihr Server, um jeden Besucher bei Cloudflare zu bestätigen; fügen Sie es nie an öffentlichen Stellen ein. Sie können es später in den Widget-Einstellungen ansehen oder erneuern.
Öffnen Sie Settings → Sprache & Konto → Anmeldeschutz (Cloudflare Turnstile), fügen Sie Site Key und Secret Key ein und klicken Sie auf Speichern. Das Badge wechselt zu „Schutz ist AN“. Zum späteren Ausschalten beide Felder leeren und speichern. Das gespeicherte Secret wird verschlüsselt abgelegt und nie wieder angezeigt; lassen Sie das Feld leer, um es zu behalten.
Öffnen Sie eine Ihrer öffentlichen Anmeldeseiten in einem privaten Browserfenster: Das Turnstile-Widget erscheint über der Schaltfläche. Melden Sie sich mit einer Testadresse an; Sie sollten die Bestätigungs-E-Mail erhalten. Eine Übermittlung ohne bestandene Prüfung wird abgelehnt.
Kann Ihr Server den Verifizierungsdienst von Cloudflare nicht erreichen (Ausfall oder gesperrte ausgehende Verbindung), lässt MarbleSend die Anmeldung normalerweise durch und protokolliert das Ereignis, statt jeden Besucher auszusperren; Honeypot sowie Limits pro IP und pro Adresse gelten weiterhin. Solange Sie über das SES Relay senden, ist es umgekehrt und schlägt geschlossen fehl: Anmeldungen werden abgelehnt, bis Cloudflare wieder erreichbar ist.
Cloudflare veröffentlicht Dummy-Schlüssel zum Testen: Site key 1x00000000000000000000AA mit Secret key 1x0000000000000000000000000000000AA besteht immer. Sie schützen nie eine echte Website; ersetzen Sie sie vor dem Livegang durch Ihre eigenen Schlüssel.
Das Widget erscheint nicht: Prüfen Sie, ob der Hostname der Seite im Turnstile-Widget eingetragen ist und keine Browsererweiterung challenges.cloudflare.com blockiert. „Invalid site key“: Der Site Key wurde mit Leerzeichen kopiert oder gehört zu einem anderen Widget. Echte Besucher werden abgelehnt: Fügen Sie den Secret Key erneut ein; er muss zum selben Widget wie der Site Key gehören.
Wenn Sie über das Managed Amazon SES Relay senden, ist Turnstile für öffentliche Anmeldeformulare Pflicht. Solange nicht beide Schlüssel gespeichert sind, zeigt die Anmeldeseite „Anmeldung vorübergehend nicht verfügbar“, und Settings → Sprache & Konto zeigt einen Hinweis mit einer Schaltfläche, die Sie zur richtigen Karte bringt. In diesem Modus muss außerdem jeder neue Abonnent per E-Mail bestätigen (Double-Opt-in), selbst wenn eine Anmeldeseite oder ein API-Aufruf Single-Opt-in verlangt.
6.4 Berechtigte REST-API-Schlüssel & Programmatischer Entwicklerzugriff
Die REST API ermöglicht externen Websites, Landingpages, mobilen Apps und dem offiziellen WordPress-Plugin MarbleSend Forms die sichere Interaktion mit Ihrer Kontaktdatenbank und Sende-Engine. API-Schlüssel verwenden kryptografische Präfixe, Einweg-SHA-256-Speicherung und granulare Scopes.
Schlüssel werden mit einem ms_-Präfix gefolgt von 32 kryptografisch sicheren Zufallsbytes über random_bytes(24) generiert. Der Rohschlüssel wird nur einmal bei der Erstellung angezeigt und kann nie wieder abgerufen werden.
Nur der SHA-256-Hash (hash('sha256', $rawKey)) wird in cm_api_keys.key_hash gespeichert. Selbst bei direktem Auslesen der Datenbank können aktive Tokens weder entschlüsselt noch wiederhergestellt werden.
Beschränken Sie Schlüssel auf spezifische Fähigkeiten: contacts:read, contacts:write, campaigns:read, campaigns:write, campaigns:send, schedules:read und schedules:write für strikte Rechtevergabe nach dem Minimalprinzip.
Eingehende Anfragen authentifizieren sich über Authorization: Bearer ms_...-Header, die mit hash_equals() evaluiert werden. Telemetrieprotokolle erfassen den genauen last_used_at-Zeitstempel bei jedem erfolgreichen Aufruf.
6.5 Ausgehende Ereignis-Webhooks & Kryptografische HMAC-SHA256-Zustellung
Kontakt-Events (subscribed, confirmed, unsubscribed, suppressed) enthalten jetzt neben tags ein groups-Array aus {id, name}.
Webhooks bieten Echtzeit-HTTP-Ereignis-Streaming an externe Endpunkte, sodass CRM-Systeme, Slack-Benachrichtigungen oder benutzerdefinierte Automatisierungen sofort auf Abonnenten-Anmeldungen, Kampagnen-Versendungen, Abmeldungen und Hard Bounces reagieren können.
Abonnieren Sie wichtige Auslöser: contact.created, contact.unsubscribed, campaign.sent, campaign.bounced und link.clicked mit individueller Aktivierung pro Webhook.
Jede Webhook-POST-Anfrage enthält X-MarbleSend-Signature: sha256=..., generiert mit hash_hmac('sha256', $payload, $secret), sodass empfangende Server die Authentizität zuverlässig prüfen können.
Fehlgeschlagene Webhook-Zustellungen (HTTP 5xx oder Timeouts) lösen exponentielle Wiederholungsversuche aus. Endpunkte mit aufeinanderfolgenden Fehlern werden automatisch pausiert, um Serverlast zu vermeiden.
Die Schaltfläche Test Webhook sendet sofort Test-Payloads. Der Zustellungsverlaufsbereich zeigt HTTP-Statuscodes, Ausführungslatenz in Millisekunden und Fehlermeldungen an.
6.6 Die 4-Säulen-Zustellbarkeits-Suite (SPF, DKIM, DMARC, BIMI)
Die Zustellbarkeit entscheidet, ob Ihre E-Mails im Posteingang landen oder im Spam-Ordner verschwinden. MarbleSend verfügt über eine integrierte DNS-Inspektions-Engine, die vier sequenzielle, nicht-blockierende Abfragen direkt an autoritative Nameserver ohne externe APIs sendet.
Prüft Root-TXT-Einträge auf v=spf1-Syntax. Verifiziert autorisierte SMTP-Host-Mechanismen, warnt vor DNS-Lookup-Limits (>10 Lookups führen zu Hardfail) und prüft Qualifizierer (~all oder -all).
Überprüft selector._domainkey.domain.com zur Validierung öffentlicher RSA- oder Ed25519-Schlüssel. Stellt sicher, dass ausgehende E-Mail-Header kryptografisch gegen Absenderdomänen verifiziert werden können.
Prüft _dmarc.domain.com auf Richtlinien-Tags (p=none, p=quarantine oder p=reject). Im Jahr 2026 schreiben Gmail und Yahoo aktive DMARC-Einträge mit rua-Berichterstattung für Massenabsender vor.
Fragt default._bimi.domain.com nach SVG-Tiny-P.S.-Markenlogos und Verified Mark Certificates (VMC) ab, um verifizierte Marken-Avatare direkt in Gmail-, Yahoo- und Apple-Mail-Posteingängen anzuzeigen.
6.7 Dual-Mode KI-Engine: BYOK-Anbieter & MarbleSend KI-Credits
MarbleSend bietet eine flexible Dual-Mode-KI-Engine für Copywriting, Betreffzeilen und Spam-Scoring: (1) Bring Your Own Key (BYOK) für Direktverbindungen zu führenden LLMs ohne Aufschlag und (2) MarbleSend KI-Credits für sofortigen Pay-as-you-go-Zugang zu kuratierten Spitzenmodellen ohne Entwicklerkonten.
Verbinden Sie sich direkt mit OpenAI, Anthropic Claude, Google Gemini, DeepSeek, Moonshot, OpenRouter oder privaten Ollama-Instanzen. API-Schlüssel werden im Ruhezustand mit AES-256-GCM verschlüsselt. Anfragen laufen ohne Zwischenhändleraufschläge direkt an die Anbieter-API.
Vorausbezahltes KI-Guthaben direkt über MarbleSend. Bietet kuratierte, hocheffiziente Modelle, die speziell für E-Mail-Marketing-Konversion und Zustellbarkeit optimiert sind. Der Vendor-Server steuert Routing und Upgrades dynamisch und bucht atomar 1 Credit pro Generierung ab.
Official add-on pricing is retrieved dynamically from admin.marblesend.com. Purchase top-up credit packs via global and local payment gateways with instant real-time balance activation.
All BYOK credentials are encrypted at rest with hardware-accelerated AES-256-GCM using your installation's unique APP_KEY. No prompt contents, contact lists, or recipient emails are ever stored or logged by the license server.
6.7.1 Standardmodell-Auswahl & Ausführungsrouting
Legt fest, wie MarbleSend AI-Texterstellung, Betreffzeilenvorschläge und Deliverability-Prüfungen in der gesamten Anwendung leitet. Sie können zwischen kuratierten Vendor-Relays und direkten BYOK-Anbietern wechseln.
Konfigurationsfreier Zugriff auf erstklassige, speziell für E-Mail-Konvertierung bewertete kuratierte Modelle. Keine externen Entwicklerkonten oder API-Schlüssel erforderlich.
Direkte Server-zu-Anbieter-Kommunikation ohne Aufschläge. Wählen Sie einen konfigurierten Anbieter und eine spezifische Modellkennung als Standard-Engine aus.
Templates Studio, AI Subject Score Inspector und AI Assist greifen automatisch auf die aktive Standardauswahl mit benutzerfreundlichem Fallback bei Guthabenerschöpfung zu.
Die aktive Auswahl wird in cm_settings.ai_provider_default gespeichert und stellt eine synchronisierte Ausführung über alle Admin-Sitzungen und Worker-Aufgaben sicher.
6.7.2 MarbleSend AI-Guthaben & Verwalteter Relay-Hub
MarbleSend AI-Guthaben bietet eine sofortige Pay-as-you-go-Infrastruktur für E-Mail-Texterstellung, ohne externe Abrechnungen, Quoten oder Ratenbegrenzungen verwalten zu müssen.
Jede aktivierte Lizenz erhält automatisch kostenlose Starter-Guthaben vom Lizenzserver, um die AI-Assist-Funktionen sofort testen zu können.
Generierungen werden exakt mit 1 Guthaben pro Anfrage über cm_addon_ledger abgerechnet. Eindeutige Transaktions-UUIDs verhindern Doppelabbuchungen bei Verbindungswiederholungen.
Guthabenpakete (z. B. ai_100) werden dynamisch aus dem Vendor-Edge-Katalog geladen. Zahlungen werden sicher über unseren Zahlungsdienstleister abgewickelt.
Webhook-Ereignisse schreiben Ihrem Konto nach dem Checkout sofort Guthaben gut. Eine manuelle 1-Klick-Aktualisierung sorgt für sofortigen Abgleich mit dem Server.
6.7.3 Konfigurierte Anbieter & BYOK-Infrastruktur
Verbinden und orchestrieren Sie mehrere externe LLM-Anbieter mit verschlüsselter Schlüsselspeicherung, dualen API-Protokollen und sofortiger Verbindungsdiagnose.
Verwalten Sie gleichzeitige Verbindungen zu OpenAI, Anthropic Claude, Google Gemini, DeepSeek, Kimi/Moonshot, OpenRouter oder privaten Ollama-Instanzen.
Unterstützt OpenAI-kompatible Standard-Endpunkte (/chat/completions) und das Anthropic-Nachrichtenformat (/v1/messages) mit benutzerdefinierten Proxy-Basis-URLs.
Alle BYOK-API-Schlüssel werden im Ruhezustand mit hardwarebeschleunigtem AES-256-GCM verschlüsselt. Schlüssel werden niemals in HTML-Antworten oder Systemprotokollen offengelegt.
Die Schaltfläche "Verbindung testen" sendet eine Testanfrage, um Anmeldeinformationen zu überprüfen und die Roundtrip-Latenz (ms) vor dem Produktiveinsatz zu messen.
So erhalten Sie API-Keys von den wichtigsten Providern
MarbleSend verbindet sich via BYOK direkt mit KI-Providern ohne Drittanbieter-Proxys. Nachfolgend finden Sie offizielle Links, Schritte zur Key-Erstellung und Modellverzeichnisse:
Lokale, selbstgehostete & alternative Provider (Ollama, Groq, Mistral, GLM)
Für lokale, kostenlose KI Ollama (ollama.com) installieren, Modell starten (z. B. ollama run llama3.1), Base URL auf http://localhost:11434/v1 setzen, OpenAI-Format wählen und "No Auth" aktivieren. Für Cloud-Inferenz bei console.groq.com registrieren.
Konfiguration der AI Providers in den Settings (/settings)
Sobald Sie Ihren API-Key und die gewünschte Modell-ID haben, richten Sie den Provider in MarbleSend wie folgt ein:
Klicken Sie in der Seitenleiste auf Settings und wechseln Sie in den Reiter "AI Providers" (direkt unter /settings).
Klicken Sie auf ein Quick-Add-Preset (OpenAI, DeepSeek, Gemini, Anthropic usw.) zur automatischen Vorbelegung oder auf "+ Add Provider".
Wählen Sie das Format: "OpenAI format" (für OpenAI, DeepSeek, Gemini, Groq, Ollama) oder "Anthropic format" (für Claude). Prüfen Sie die Base URL.
Fügen Sie Ihren Secret-Key ein. MarbleSend verschlüsselt alle Keys mit AES-256-GCM via Crypto.php ohne Klartext-Speicherung.
Tragen Sie die Modell-ID und das Kontextfenster ein und klicken Sie auf "Test Connection", um einen Live-Handshake durchzuführen.
Wählen Sie oben unter "Default AI Model" den gespeicherten Provider und das Modell aus und klicken Sie auf "Save Default".
6.8 Kryptografische Ed25519-Lizenz-Grant-Token-Engine
MarbleSend verifiziert die Produkt-Authentizität mittels asymmetrischer Ed25519-Kryptografie über die native libsodium-Erweiterung von PHP. Ein signiertes License Grant Token wird bei der Erstaktivierung ausgestellt und lokal ohne permanente Verbindungsanforderungen validiert.
Validiert die digitale Signatur mit sodium_crypto_sign_verify_detached(). Jede manuelle Manipulation an Datenbankeinträgen bricht sofort die mathematische Signatur und sichert absolute Integrität.
Das signierte Token bettet den lizenzierten Domain-Hostnamen, die Lizenzstufe (Regular oder Extended) und aktive Berechtigungen ein. Multi-Domain-Umzüge können direkt aus den Einstellungen initiiert werden.
Vorübergehende Netzwerkausfälle oder Wartungen des Lizenzservers unterbrechen niemals laufende E-Mail-Sendungen oder Cron-Jobs. MarbleSend bietet ein 7-tägiges Zeitfenster vor jeglicher Einschränkung.
Wenn eine Lizenz abläuft, erzwingt MarbleSend einen sanften Soft-Lock: Vorhandene Abonnentendaten, Kampagnen, Berichte und Exportwerkzeuge bleiben zu 100 % zugänglich, während neue Sendungen pausiert werden.
Einmal täglich fragt der Worker den Lizenzserver, ob es eine neuere Version gibt. Gesendet werden nur Ihr Kaufcode und die installierte Version, genau wie bei der manuellen Prüfung. Mit „Release-Updates“ in diesem Tab schalten Sie das ab: Dann findet keine Prüfung statt und es wird kein Update-Banner angezeigt. Entwicklungsinstallationen (APP_ENV=local) führen diesen Aufruf nie aus. Es werden niemals Daten zu Ihren Kontakten oder Campaigns gesendet.
„Änderungsprotokoll“ (Seitenleiste, über Dokumentation) listet jede Version mit ihrer Upgrade-Anleitung. Gibt es eine neuere Version, sehen Sie ein Banner im Dashboard (ein Sicherheitsupdate zeigt auf jeder Seite ein rotes Banner und lässt sich nicht schließen), einen Punkt neben „Änderungsprotokoll“ und, falls aktiviert, eine E-Mail pro Version an die Admin-Adresse über Ihr Standard-SMTP-Profil. Die Versionshinweise sind auf Englisch verfasst.
Häufig gestellte Fragen & Diagnosen
Sofortige Lösungen für die häufigsten Shared-Hosting-Probleme.
7.1 Dashboard & Betriebsdiagnose
7.1.1 Warum meldet das Dashboard den Status "Worker Not Detected" oder Inaktiv?
Der OS-Crontab wird nicht ausgeführt, der PHP CLI-Pfad ist fehlerhaft oder ein veraltetes Sperr-File verhindert die Ausführung.
Der Worker aktualisiert bei jedem Durchlauf cm_settings.worker_last_run mit einem UTC-Zeitstempel. Das Dashboard schlägt Alarm, wenn mehr als 180 Sekunden vergehen.
Navigieren Sie zu Settings → System. Kopieren Sie die exakte Crontab-Zeile. Bei Beschränkungen richten Sie die Web-Cron-URL bei cron-job.org im 1-Minuten-Takt ein. Prüfen Sie storage/worker.lock.
7.1.2 Warum weichen Öffnungs- und Klickraten zwischen Dashboard-KPIs und externen SMTP-Logs voneinander ab?
Apple Mail Privacy Protection (MPP) Prefetching, Proxy-Caching, Bildblockierung durch Empfänger oder Adblocker, die UTM-Parameter entfernen.
MarbleSend bettet ein transparentes 1x1-Tracking-GIF ein, um cm_email_logs.opened_at zu erfassen. Werden externe Bilder blockiert, erfolgt keine Erfassung; Apple MPP ruft Bilder vorab auf Apple-Servern ab.
Nutzen Sie eindeutige Klicks (CTR) als verlässlichste Kennzahl. MarbleSend leitet alle Template-Links über public/click.php weiter, um manipulationssichere Klicks zu erfassen.
7.2 Campaign-Versand & Preflight-Diagnose
7.2.1 Warum wurde mein Campaign-Versand mitten im Prozess unterbrochen oder angehalten?
Laufzeitbegrenzungen von PHP CLI oder Webserver im Shared-Hosting (max_execution_time 30s/60s) während umfangreicher Versendungen.
MarbleSend arbeitet die Warteschlange in atomaren 50er-Batches ab. Vor Erreichen des Timeouts beendet sich der Worker sauber und speichert den Fortschritt in cm_email_queue.
Kein manueller Eingriff erforderlich! Der nächste 1-Minuten-Cron-Lauf greift automatisch den nächsten Satz ausstehender Elemente auf, ohne doppelte E-Mails zu versenden.
7.2.2 Warum blockiert der automatisierte 6-Punkte-Preflight-Check den Start meiner Campaign?
Fehlender Pflicht-Token {{unsubscribe_link}}, ungültige Betreffzeile, keine aktiven Empfänger gewählt oder unvollständige Syntax-Platzhalter.
Die Preflight-Engine bewertet 6 essenzielle Compliance- und Deliverability-Vektoren, bevor der Statusübergang zu queued oder sending gestattet wird.
Prüfen Sie die roten Warnungen im Preflight-Dialog. Fügen Sie {{unsubscribe_link}} ein (Pflicht nach RFC 8058 und CAN-SPAM) und stellen Sie sicher, dass Tags aktive Contacts abdecken.
7.2.3 Wann steht "Resend to Non-openers" zur Verfügung und wie schützt dies vor Abonnentenmüdigkeit?
Die Schaltfläche im Campaign-Bericht bleibt deaktiviert, solange der Versand läuft oder eine angemessene Abkühlzeit noch nicht verstrichen ist.
MarbleSend setzt den Status campaign = completed voraus und empfiehlt mindestens 24 bis 48 Stunden Wartezeit für Empfänger in abweichenden Zeitzonen.
Klicken Sie nach Abschluss auf "Resend to Non-openers". Dies erzeugt eine Kind-Kampagne nur für Contacts mit opened_at IS NULL, sodass Sie einen neuen Betreff testen können.
7.3 Contacts-Verwaltung, CSV-Import & Bounce-Handling
7.3.1 Warum hat der CSV-Importer Zeilen übersprungen oder Abonnenten-Record nicht importiert?
Ungültige E-Mail-Syntax nach RFC 5322, Duplikate bei aktivem "Skip Duplicates", Nicht-UTF-8-Kodierung oder gesperrte Contacts.
MarbleSend prüft jede Zeile via filter_var(FILTER_VALIDATE_EMAIL) und gleicht sie mit cm_contacts ab, um abgemeldete oder gebouncte Kontakte nicht zu überschreiben.
Speichern Sie das CSV-File als UTF-8 ohne BOM ab. Prüfen Sie das Spalten-Mapping (email, name, tags) und kontrollieren Sie im Importbericht die übersprungenen Zeilennummern.
7.3.2 Wie unterscheidet MarbleSend zwischen Soft Bounces und Hard Bounces?
Dauerhafte Zustellungsfehler (SMTP-Fehlercodes 5xx: Postfach existiert nicht) gegenüber vorübergehenden Fehlern (SMTP-Fehlercodes 4xx: Postfach voll, Rate-Limit).
Eine 5xx-Antwort stuft den Contact sofort auf status = bounced ein. Eine 4xx-Antwort vermerkt einen Versuch in cm_email_logs und unternimmt bis zu 3 Retrys vor der Einstufung als bounced.
Aktivieren Sie niemals Kontakte mit Hard Bounce erneut. Dies schadet der Domain-Reputation bei E-Mail-Anbietern wie Gmail und Yahoo nachhaltig.
7.4 Template-Rendering, Outlook & Email-Safe-Design
7.4.1 Warum wird mein E-Mail-Template in Microsoft Outlook für Desktop fehlerhaft dargestellt?
Microsoft Outlook unter Windows verwendet die Rendering-Engine von Microsoft Word (MSO), die CSS Flexbox, Grid, margin auto und HTML5-Layout-Tags ignoriert.
Word MSO interpretiert ausschließlich traditionelle tabellenbasierte Layouts (verschachtelte <table>, <tr>, <td>) mit festen Breiten und Inline-Styles.
Verwenden Sie die 8 vorgefertigten Email-Safe-Starter-Layouts von MarbleSend. Diese nutzen verschachtelte HTML-Tabellen und MSO-Bedingungen (<!--[if mso]>).
7.4.2 Warum blendet Gmail "[Message clipped] View entire message" am Ende meiner E-Mails ein?
Die reine HTML-Dateigröße der E-Mail übersteigt das strikte 102-KB-Limit (104.448 Bytes) von Gmail.
Bei Überschreitung von 102 KB schneidet Gmail die Nachricht ab, wodurch Inhalte, der Abmelde-Link im Footer sowie der Tracking-Pixel verborgen werden.
Laden Sie Bilder auf externe HTTPS-Server hoch, anstatt Base64-Strings einzubetten. Bereinigen Sie den Code im Templates Studio über "Clean HTML" vor dem Versand.
7.4.3 Warum ist {{news_posts}} in meiner E-Mail leer oder fehlt?
Der Platzhalter wird nur von einem Newsletter-Zeitplan gefüllt, dessen Inhaltsquelle „News-Beiträge“ ist. In einer manuellen Campaign, einem RSS-Zeitplan oder einem reinen Vorlagen-Zeitplan wird er durch leeren Text ersetzt.
Die Campaign-Vorabprüfung warnt, wenn eine Vorlage {{news_posts}} ohne Quelle für News-Beiträge verwendet; die Vorschau unter Vorlagen → Beiträge zeigt stets den gefüllten Block.
Senden Sie die Vorlage über einen Newsletter-Zeitplan mit „News-Beiträge“ oder entfernen Sie den Platzhalter aus anderweitig genutzten Vorlagen.
7.5 Schedules, RSS-Feeds & Worker-Taktung
7.5.1 Warum hat mein automatisierter RSS-Zeitplan bei neuen Blog-Artikeln keine E-Mail versendet?
Feed-URL war nicht erreichbar, Feed-XML-Syntax war fehlerhaft oder die Beitrags-GUID stimmte mit cm_schedules.last_rss_item_id überein.
MarbleSend speichert einen SHA-256-Hash des letzten Beitrags in last_rss_item_id. Fehlen neue <item>- oder <entry>-Elemente, bricht der Worker ohne Warteschlangen-Eintrag ab.
Öffnen Sie den Zeitplan unter /schedules und klicken Sie auf "Test Feed". Überprüfen Sie, ob der RSS-Feed valide <pubDate>- und eindeutige <guid>-Tags liefert.
7.5.2 Was geschieht mit wiederkehrenden Schedules, wenn der Server oder Worker-Cron mehrtägig ausfiel?
Mehrere geplante Ausführungsintervalle sind verstrichen, während der Worker-Prozess inaktiv war.
MarbleSend erzwingt eine strikte "Single Catch-Up Policy" im SchedulerService. Statt alle verpassten Läufe nachzuholen, wird lediglich der jüngste Termin ausgeführt.
Sobald der Cron-Dienst wieder läuft, wird genau 1 Nachhol-Broadcast versendet. Der Zeitstempel next_run_at springt automatisch auf den nächsten künftigen Termin.
7.5.3 Warum hat der Zeitplan mit News-Beiträgen meinen Bereit-Beitrag nicht gesendet?
Der Beitrag wurde Bereit, bevor der Modus News-Beiträge des Zeitplans aktiviert wurde, wurde von diesem Zeitplan bereits zugestellt, oder Zielgruppe oder Vorlage haben den Durchlauf blockiert.
Öffnen Sie den Zeitplan-Verlauf: „no new posts“ bedeutet, dass nichts infrage kommt, „no recipients“, dass die Zielgruppe leer war, und „failed“, dass die Vorlage fehlt oder {{news_posts}} nicht enthält.
Markieren Sie eine Kopie des Beitrags als Bereit, nachdem der Zeitplan existiert, korrigieren Sie Zielgruppe oder Vorlage und nutzen Sie dann Jetzt ausführen.
7.5.4 Können zwei Zeitpläne denselben Beitrag senden?
Der Versand wird pro Zeitplan erfasst, nicht pro Beitrag.
Jeder Zeitplan mit News-Beiträgen führt eigene Aufzeichnungen darüber, welche Beiträge er zugestellt hat; die Bibliothek zeigt daher die Summe „Versendet Nד.
Ja — ein Beitrag, der Bereit ist, nachdem beide Zeitpläne erstellt wurden, wird von jedem einmal gesendet; keiner sendet ihn zweimal.
7.6 Settings, Deliverability, Webhooks & Lizenzierung
7.6.1 Wie behebe ich die SMTP-Fehler "535 Authentication Failed" oder "550 Relay Access Denied"?
Falsche SMTP-Zugangsdaten, abweichende Port- und Verschlüsselungspaare (Port 587 STARTTLS vs Port 465 SSL) oder unbestätigte Absender-Adresse.
Settings → SMTP bietet einen Live-Socket-Test, der die direkte Kommunikation zwischen PHPMailer und Ihrem SMTP-Server darstellt.
Verwenden Sie Port 587 mit TLS. Generieren Sie für Gmail/Google Workspace ein App Password. Bestätigen Sie für Amazon SES die Absender-Domain. Nutzen Sie bei cPanel die vollständige E-Mail-Adresse als Benutzername.
7.6.2 Warum meldet die Deliverability Suite Fehler bei der SPF-, DKIM- oder DMARC-Validierung?
Fehlende DNS-Einträge der Absender-Domain, Überschreiten des 10-Lookup-Limits bei SPF oder Selektor-Abweichungen bei DKIM.
MarbleSend führt nicht-blockierende DNS-Abfragen (dns_get_record) direkt an autoritativen Nameservern für SPF (root TXT), DKIM (selector._domainkey) und DMARC (_dmarc) durch.
Fügen Sie den include-Mechanismus Ihres SMTP-Relays zu Ihrem SPF-Record hinzu. Überprüfen Sie den DKIM-Selektor und stellen Sie sicher, dass DMARC eine gültige rua-Reporting-Adresse enthält.
7.6.3 Wie arbeitet der Webhook-Circuit-Breaker und wie reaktiviere ich einen pausierten Endpunkt?
Der Ziel-Endpunkt hat wiederholt HTTP-5xx-Fehler, Timeouts (>10s) oder 404-Statuscodes zurückgegeben.
Um eine Überlastung der Server-Warteschlange zu verhindern, erfasst MarbleSend Fehlversuche und pausiert den Webhook (enabled = 0) nach mehreren Fehlschlägen.
Prüfen Sie im Übermittlungsverlauf die genauen HTTP-Statuscodes. Klicken Sie nach Behebung auf "Test Webhook", prüfen Sie die HMAC-Signatur und aktivieren Sie den Endpunkt wieder.
7.6.4 Wie funktioniert die Ed25519-Lizenzprüfung und was bedeutet die 7-tägige Offline-Kulanzzeit?
Netzwerkunterbrechungen, DNS-Probleme oder temporäre Wartungsarbeiten am zentralen Lizenzserver.
Die Lizenz wird lokal im Arbeitsspeicher über libsodium sodium_crypto_sign_verify_detached() geprüft. Manuelle Manipulationen der Datenbank zerstören die Signatur.
MarbleSend gewährt ein 7-tägiges Offline-Zeitfenster (grace_until). Laufende Sendungen werden nicht gestoppt. Nach Ablauf bleiben Abonnentendaten und Berichte unter dem Soft-Lock vollständig einsehbar.
WordPress & Drittanbieter-Formular-Integrationen
Sammeln Sie Abonnenten auf einer WordPress-Website und senden Sie sie an MarbleSend. Das Begleit-Plugin hat ein eigenes Anmeldeformular und verbindet WPForms, Contact Form 7, Fluent Forms, Formidable Forms und Forminator.
Formular-Integrations-Inspektor
Wählen Sie eine Komponente, um ihren Hook, die gesendeten Daten und einen Einrichtungstipp zu sehen.
REST-API-Brücke
Keine gemeinsame DatenbankVersandwarteschlange
Transient-SpeicherMarbleSend Form
Shortcode, Block & WidgetWPForms-Hook
wpforms_process_completeContact-Form-7-Hook
wpcf7_mail_sentFluent-Forms-Hook
submission_insertedFormidable Forms
frm_after_create_entryForminator-Hook
submit_before_set_fieldsTag-Autoresponder
Tags und Willkommens-E-MailsInstallieren Sie zuerst das Begleit-Plugin (marblesend-forms.zip)
MarbleSend läuft auf einem eigenen Server, deshalb braucht WordPress ein kleines Plugin, um Abonnenten dorthin zu senden. Das Plugin bedient das integrierte MarbleSend-Formular und verbindet WPForms, Contact Form 7, Fluent Forms, Formidable Forms und Forminator. Es ist kostenlos, erfordert WordPress 6.3 oder neuer sowie PHP 7.4 oder neuer und spricht nur über die REST API mit MarbleSend.
Wo erscheinen die Settings-Menüs?
Nach der Aktivierung des Plugins zeigt WordPress in wp-admin unter Settings zwei Seiten: MarbleSend Forms (Verbindungs-URL, API-Key, Standard-Tags und das Fehlerprotokoll) und MarbleSend Integrations (Feldzuordnung für jedes Formular-Plugin). Beide befinden sich in WordPress. Das MarbleSend-Dashboard hat sie nicht. Deine eigenen Formulare mit Gruppe, Tags und Spam-Schutz verwaltest du unter MarbleSend Forms in der Seitenleiste.
1. marblesend-forms.zip herunterladen
Laden Sie marblesend-forms.zip unter Settings → Lizenz in MarbleSend herunter oder direkt unter https://marblesend.com/download/marblesend-forms.zip. Es ist ein sofort installierbares WordPress-Plugin-Zip: Laden Sie es unverändert hoch, ohne es zu entpacken.
2. In WordPress installieren und aktivieren
Gehen Sie in wp-admin zu Plugins → Add New → Upload Plugin, wählen Sie marblesend-forms.zip, klicken Sie auf Install Now und dann auf Activate Plugin. Für ein späteres Update laden Sie das neuere Zip auf dieselbe Weise hoch. WordPress bietet an, die installierte Version zu ersetzen, und Ihre Einstellungen bleiben erhalten.
3. API-Key verbinden (contacts:write)
Öffnen Sie in MarbleSend Settings → API & Webhooks und erstellen Sie einen API-Key mit dem Scope contacts:write. Öffnen Sie in WordPress Settings → MarbleSend Forms, tragen Sie die MarbleSend Site URL und den Key ein, speichern Sie und klicken Sie auf Test Connection. Es sollte Connected mit dem Scope contacts:write anzeigen. Wähle danach eine Default Group und Default Tags aus den Listen, die aus MarbleSend geladen werden, oder lege dort eine neue Gruppe an.
4. Formulare zuordnen
Öffnen Sie in wp-admin Settings → MarbleSend Integrations. Jedes aktive Formular-Plugin erscheint mit seinen Formularen. Setzen Sie den Haken bei Enabled, tragen Sie das E-Mail-Feld und, falls vorhanden, das Namensfeld ein, fügen Sie bei Bedarf Tags hinzu und speichern Sie. Das integrierte Formular braucht keine Zuordnung.
8.1 Wie das Plugin mit MarbleSend spricht
Das Plugin ruft die MarbleSend REST API über HTTPS auf, deshalb können WordPress und MarbleSend auf verschiedenen Servern laufen. Auf die MarbleSend-Datenbank hat es keinen Zugriff.
WordPress liest nie MarbleSend-Tabellen, und MarbleSend liest nie wp_posts oder wp_users. Beide können auf getrennten Hosts mit getrennten Datenbanken laufen.
Jede Anfrage trägt einen Bearer-API-Key aus Settings → API & Webhooks. Der Scope contacts:write genügt, der Key kann also weder Campaigns senden noch Zeitpläne ändern.
Test Connection in Settings → MarbleSend Forms ruft GET /api/verify-key auf und zeigt die Scopes des Keys an. Eine falsche URL oder ein falscher Key fällt so sofort auf.
Jede Einsendung geht an POST /api/contacts. Eine neue E-Mail wird zum Kontakt. Ein bestehender Kontakt behält seinen Status und bekommt die neuen Tags zu den vorhandenen hinzu; sein Name ändert sich nur, wenn das Formular einen sendet. Bei aktivem Double-Opt-in bleibt ein neuer Kontakt pending, bis er bestätigt.
curl -X POST https://your-domain.com/api/contacts \
-H "Authorization: Bearer ms_live_abc123..." \
-H "Content-Type: application/json" \
-d '{"email":"visitor@example.com","name":"John Doe","tags":["newsletter","source:wpforms"]}'
Optional: Füge "group_ids":[1,2] hinzu, um den Kontakt in bestimmte Gruppen zu legen (Liste über GET /api/groups; ohne Angabe = General). GET /api/contacts akzeptiert group_id zum Filtern nach Gruppe.
8.2 Versandwarteschlange und WP-Cron
Ein langsames oder nicht erreichbares MarbleSend soll das Formular eines Besuchers weder hängen lassen noch einen Lead kosten. Einsendungen von Formular-Plugins werden eingereiht und im Hintergrund gesendet.
Wenn ein Formular-Plugin absendet, bereinigt MarbleSend_Integration_Base::dispatch() die Felder und speichert sie in einem WordPress-Transient (set_transient). Solange der Besucher wartet, erfolgt keine Anfrage an MarbleSend.
Ein WP-Cron-Ereignis, marblesend_forms_process_queue, wird für etwa eine Minute später geplant und sendet die eingereihten Einsendungen.
WP-Cron sendet jeden Eintrag der Warteschlange einmal. Das integrierte Formular ruft MarbleSend zuerst direkt auf und reiht die Einsendung für einen WP-Cron-Versuch nur ein, wenn dieser Aufruf fehlschlägt. Ein eingereihter Eintrag wird bis zu eine Stunde aufbewahrt.
Schlägt das Senden fehl oder läuft ein Eintrag ab, bevor WP-Cron ihn senden konnte, fügt das Plugin marblesend_forms_log eine Zeile hinzu (die letzten 50 Records bleiben erhalten) und zeigt in wp-admin einen Admin-Hinweis. Settings → MarbleSend Forms listet das Protokoll und die Zahl der ausstehenden Einträge auf.
// Non-blocking submission buffer in WordPress
set_transient('marblesend_forms_queue_' . wp_generate_uuid4(), $payload, 3600);
if (!wp_next_scheduled('marblesend_forms_process_queue')) {
wp_schedule_single_event(time() + 5, 'marblesend_forms_process_queue');
}
8.3 Das integrierte Anmeldeformular
Das Plugin enthält ein Anmeldeformular, Sie brauchen also keinen Formular-Builder. Fügen Sie es per Shortcode, Gutenberg-Block oder Widget ein. Alle drei führen denselben Code aus.
Verwenden Sie [marblesend_form], den Gutenberg-Block marblesend/subscribe-form oder das Widget MarbleSend Subscribe Form. Der Shortcode kennt tags, show_name (1 oder 0) und consent (der Text einer Pflicht-Checkbox). Block und Widget bieten dieselben Optionen. Erstelle eigene Formulare unter MarbleSend Forms → Add New Form und binde eines mit [marblesend_form id="12"] ein.
Ein Honeypot-Feld außerhalb des sichtbaren Bereichs (marblesend_hp), eine Nonce, die beim Absenden des Formulars angefordert wird, damit eine zwischengespeicherte Seite nie eine abgelaufene ausliefert, und ein Limit von 5 Einsendungen pro 60 Sekunden je IP (gehasht gespeichert). Eine Anfrage, die den Honeypot ausfüllt oder keine gültige Nonce hat, erhält eine normal wirkende Erfolgsmeldung und wird verworfen. Zu viele Anfragen erhalten einen kurzen Hinweis, kurz zu warten. Im Editor erstellte Formulare können außerdem Cloudflare Turnstile oder Google reCAPTCHA nutzen, einzustellen unter Settings → MarbleSend Forms.
Die Seite lädt nicht neu. Das Plugin sendet den Kontakt sofort an MarbleSend (Zeitlimit 5 Sekunden). Ist MarbleSend nicht erreichbar oder das Plugin noch nicht eingerichtet, kommt die Einsendung für einen WP-Cron-Versuch in die Warteschlange, und der Besucher sieht trotzdem die Erfolgsmeldung. Schlägt die Anfrage selbst fehl, zeigt das Formular einen Fehler und lässt sich erneut absenden.
Gibt der Besucher nur eine E-Mail an, wird ein neuer Kontakt nach dem Teil vor dem @ benannt, weil die API einen Namen verlangt. Ein bestehender Kontakt behält seinen Namen. Jeder Kontakt erhält den Tag source:wp-form plus die Tags aus dem Formular und aus Settings → MarbleSend Forms. Bei aktivem Double-Opt-in sieht der Besucher eine Meldung, die ihn bittet, seine E-Mails zu prüfen. Der Kontakt kommt in die Gruppe des Formulars oder in die Default Group aus Settings → MarbleSend Forms.
[marblesend_form tags="newsletter,inbound" show_name="1" consent="I agree to receive email updates and accept the privacy policy."]
8.4 WPForms (Lite & Pro)
WPForms ist einer der meistgenutzten Formular-Builder. Das Plugin liest die Einsendung, sobald WPForms sie validiert hat, ein WPForms-Add-on brauchen Sie also nicht.
Das Plugin erkennt WPForms mit function_exists('wpforms') und lauscht auf die Aktion wpforms_process_complete (Priorität 10), die die validierten Felder erhält.
WPForms identifiziert Felder über eine Nummer. Wählen Sie im Builder ein Feld aus und lesen Sie seine ID oben in den Feldoptionen ab, zum Beispiel Field ID #2. Tragen Sie diese Nummer in die Zuordnung ein. Ein Namensfeld mit Vor- und Nachname wird zu einem Namen zusammengeführt.
1. Notieren Sie die ID des E-Mail-Felds und, falls vorhanden, des Namensfelds. 2. Öffnen Sie Settings → MarbleSend Integrations und suchen Sie WPForms. 3. Setzen Sie den Haken bei Enabled und tragen Sie die IDs und gewünschte Tags ein. 4. Speichern.
Jeder Kontakt aus WPForms erhält neben Ihren eigenen Tags den Tag source:wpforms, sodass Sie eine Campaign nur an diese Gruppe senden können.
add_action('wpforms_process_complete', function($fields, $entry, $form_data, $entry_id) {
$email = $fields[1]['value'] ?? ''; // Numeric Field ID #1
$name = $fields[0]['value'] ?? ''; // Numeric Field ID #0
MarbleSend_Integration_Base::dispatch('wpforms', $form_data['id'], $email, $name);
}, 10, 4);
8.5 Contact Form 7 (CF7)
Contact Form 7 definiert seine Felder als Tags in einer Textvorlage. Das Plugin greift ein, nachdem die E-Mail des Formulars gesendet wurde.
Das Plugin erkennt CF7 mit class_exists('WPCF7_ContactForm') und lauscht auf wpcf7_mail_sent (Priorität 10). Ein Lead wird erst weitergeleitet, nachdem das Formular die Spam- und Validierungsprüfungen bestanden hat und Contact Form 7 seine eigene E-Mail gesendet hat. Schlägt der E-Mail-Versand bei Ihrem Hosting fehl, wird nichts weitergeleitet.
CF7 benennt ein Feld im Formular-Tag, zum Beispiel [email* your-email] und [text your-name]. Tragen Sie den Namen (your-email, your-name) in die Felder Email Field und Name Field ein.
Das Plugin liest die gesendeten Daten mit WPCF7_Submission::get_instance()->get_posted_data(), was mit dem AJAX-Versand von CF7 funktioniert.
1. Öffnen Sie unter Contact → Contact Forms das Formular und notieren Sie die Tag-Namen. 2. Suchen Sie in Settings → MarbleSend Integrations Contact Form 7. 3. Setzen Sie den Haken bei Enabled, tragen Sie your-email und, falls vorhanden, your-name ein und fügen Sie bei Bedarf Tags hinzu. 4. Speichern.
add_action('wpcf7_mail_sent', function($contact_form) {
$submission = WPCF7_Submission::get_instance();
$data = $submission ? $submission->get_posted_data() : [];
$email = $data['your-email'] ?? '';
$name = $data['your-name'] ?? '';
MarbleSend_Integration_Base::dispatch('cf7', $contact_form->id(), $email, $name);
}, 10, 1);
8.6 Fluent Forms (Free & Pro)
Das Plugin lauscht auf die Aktion, die Fluent Forms nach dem Speichern eines Eintrags auslöst.
Das Plugin erkennt Fluent Forms mit function_exists('wpFluent') und lauscht auf fluentform/submission_inserted (Priorität 10), das $entry_id, $form_data und $form erhält.
Fluent Forms identifiziert Felder über ihr Name Attribute, zum Beispiel email für E-Mail und names für das Namensfeld (Vor- und Nachname werden zusammengeführt). Sie finden es in den Feldeinstellungen unter Advanced Options.
Die Seite Integrations listet Ihre Formulare, indem sie die eigene Formulartabelle von Fluent Forms liest. Formular-IDs müssen Sie also nicht nachschlagen.
1. Prüfen Sie das Name Attribute des E-Mail- und des Namensfelds. 2. Setzen Sie in Settings → MarbleSend Integrations bei dem Formular den Haken bei Enabled und tragen Sie beide ein. 3. Fügen Sie Tags hinzu und speichern Sie. Neue Kontakte erhalten den Tag source:fluentforms.
add_action('fluentform/submission_inserted', function($entryId, $formData, $form) {
$email = $formData['email'] ?? '';
$name = is_array($formData['names'] ?? null) ? implode(' ', $formData['names']) : ($formData['first_name'] ?? '');
MarbleSend_Integration_Base::dispatch('fluentforms', $form->id, $email, $name);
}, 10, 3);
8.7 Formidable Forms (Lite & Pro)
Das Plugin liest den Eintrag direkt, nachdem Formidable Forms ihn gespeichert hat.
Das Plugin erkennt Formidable mit class_exists('FrmForm') und lauscht auf frm_after_create_entry (Priorität 30), das $entry_id und $form_id erhält.
Formidable vergibt an jedes Feld eine numerische Field ID (z. B. 12). Tragen Sie sie in die Zuordnung ein; Feldschlüssel werden nicht unterstützt. Die Daten werden über FrmEntry::getOne($entry_id)->metas gelesen.
Das Plugin läuft, nachdem der Eintrag angelegt wurde. Weitergeleitet werden also nur Einsendungen, die die Validierung von Formidable bestanden haben.
1. Klicken Sie im Formidable-Builder auf das E-Mail-Feld und notieren Sie dessen Field ID. 2. Aktivieren Sie unter Settings → MarbleSend Integrations das Formular und tragen Sie die Field ID ein. 3. Zuordnung speichern. Übernommene Leads erhalten den Tag source:formidable.
add_action('frm_after_create_entry', function($entryId, $formId) {
$entry = FrmEntry::getOne($entryId, true);
$email = $entry->metas[12] ?? $entry->metas['email-address'] ?? '';
$name = $entry->metas[11] ?? $entry->metas['full-name'] ?? '';
MarbleSend_Integration_Base::dispatch('formidable', $formId, $email, $name);
}, 30, 2);
8.8 Forminator (Free & Pro)
Das Plugin lauscht auf den Hook, den Forminator bei der Verarbeitung einer Einsendung auslöst.
Das Plugin erkennt Forminator mit class_exists('Forminator_API') und lauscht auf forminator_custom_form_submit_before_set_fields (Priorität 10), der $entry, $form_id und $field_data erhält.
Forminator vergibt an jedes Feld eine Element-ID wie email-1, name-1 oder text-1. Tragen Sie diese IDs in die Zuordnung ein. Der Formular-Editor zeigt sie an.
Die Seite Integrations listet Ihre Forminator-Formulare mit Namen auf, gelesen mit Forminator_API::get_forms().
1. Öffnen Sie Forminator und notieren Sie die Element-IDs (email-1, name-1). 2. Suchen Sie in Settings → MarbleSend Integrations Forminator und tragen Sie die IDs ein. 3. Fügen Sie Tags hinzu und speichern Sie. 4. Senden Sie eine Testeinsendung und prüfen Sie, ob der Kontakt den Tag source:forminator hat.
add_action('forminator_custom_form_submit_before_set_fields', function($formId, $response, $fieldData) {
$fields = array_column($fieldData, 'value', 'name');
$email = $fields['email-1'] ?? '';
$name = $fields['name-1'] ?? '';
MarbleSend_Integration_Base::dispatch('forminator', $formId, $email, $name);
}, 10, 3);
8.9 Tags, Segmente und Autoresponder
Kontakte aus dem WordPress-Plugin kommen in die Gruppe, die in Settings → MarbleSend Forms (Default Group) oder am Formular gewählt ist, und landen in General, wenn keine gewählt ist. Nutze Tags zur Segmentierung oder verschiebe sie unter Contacts in Gruppen.
Eine E-Mail zu erfassen ist nur der erste Schritt. Tags bestimmen, was danach mit dem Kontakt passiert.
Neben Ihren eigenen Tags erhält jeder Kontakt source:<slug>: source:wp-form, source:wpforms, source:cf7, source:fluentforms, source:formidable oder source:forminator. Damit senden Sie eine Campaign an die Abonnenten eines einzelnen Formular-Plugins.
Legen Sie unter /contacts → Autoresponders eine Regel für den Tag an, den Sie Ihrem WordPress-Formular zugewiesen haben. Sobald der Kontakt aktiv wird (direkt nach dem Absenden oder nach der Bestätigung des Double-Opt-in), reiht MarbleSend Ihre Willkommens-E-Mail mit der gewählten Vorlage und dem gewählten SMTP-Profil ein.
Das Plugin sendet Leads direkt an Ihre eigene MarbleSend-Installation. Ein Dienst wie Zapier oder Make ist nicht Teil des Wegs.
Bei aktivem Double-Opt-in werden neue Kontakte als pending mit consent_source = 'api' gespeichert. MarbleSend sendet per E-Mail einen Bestätigungslink ({{confirm_link}}). Klickt der Kontakt darauf, wechselt der Status auf active, und Zeit und IP-Adresse werden für die DSGVO festgehalten.
{
"email": "lead@agency.com",
"name": "Jane Smith",
"tags": ["source:wpforms", "ebook-download", "vip-inbound"],
"consent_source": "api"
}
8.10 Fehlerbehebung
Häufige Probleme beim Verbinden von WordPress-Formularen, mit Ursache, Prüfung und Lösung.
Warum erscheinen Einsendungen verspätet oder gar nicht in MarbleSend?
WP-Cron läuft nur, wenn jemand die Website besucht. Auf einer ruhigen oder einer Staging-Seite warten eingereihte Einsendungen auf den nächsten Besuch. Eine eingereihte Einsendung wird eine Stunde aufbewahrt. Läuft WP-Cron in dieser Zeit nicht, geht die Einsendung verloren, und marblesend_forms_log vermerkt, dass eine abgelaufen ist (den Besucher kann es nicht nennen, weil auch die gespeicherten Daten abgelaufen sind).
Öffnen Sie in wp-admin Settings → MarbleSend Forms. Die Zahl der ausstehenden Einträge zeigt, was auf marblesend_forms_process_queue wartet. Ein Protokolleintrag, dass eine eingereihte Einsendung abgelaufen ist, bedeutet: WP-Cron lief über eine Stunde lang nicht.
Rufen Sie https://your-site.com/wp-cron.php?doing_wp_cron auf, um es einmal auszuführen, oder richten Sie einen echten Server-Cronjob ein (* * * * * wget -q -O - https://your-site.com/wp-cron.php >/dev/null 2>&1).
Warum steht im Protokoll „Skipped: no valid email in form submission“?
Das E-Mail-Feld in der Zuordnung enthält einen Tippfehler, oder der Besucher hat eine leere oder ungültige Adresse gesendet, die sanitize_email() abgelehnt hat.
MarbleSend_Integration_Base::log_skip() schreibt einen Eintrag in marblesend_forms_log, wenn ein aktiviertes Formular keine gültige E-Mail liefert.
Prüfen Sie die Kennung, die Ihr Formular-Builder verwendet: eine Zahl bei WPForms (zum Beispiel 2) und Formidable Forms, den Tag-Namen bei Contact Form 7 (your-email), das Name Attribute bei Fluent Forms (email) und die Element-ID bei Forminator (email-1).
Warum meldet WordPress einen ungültigen API-Key oder einen fehlenden Scope?
Der Key in WordPress wurde widerrufen, ist abgelaufen, wurde in MarbleSend gelöscht oder ohne den Scope contacts:write erstellt.
Test Connection ruft GET /api/verify-key auf. Eine HTTP-Antwort 401 oder 403 bedeutet, dass die Authentifizierung fehlgeschlagen ist.
Öffnen Sie in MarbleSend Settings → API & Webhooks und erstellen Sie einen neuen Key mit dem Scope contacts:write (oder admin). Kopieren Sie das Token, das mit ms_ beginnt, in Settings → MarbleSend Forms in WordPress.
Warum gehen Contact-Form-7-Leads verloren, wenn das Formular einen Fehler zeigt?
Das Plugin leitet einen Lead erst weiter, nachdem Contact Form 7 seine eigene E-Mail gesendet hat. Schlägt die E-Mail fehl, zeigt CF7 seine Fehlermeldung, und der Lead wird nicht weitergeleitet.
Senden Sie das Formular selbst ab. Sehen Sie „There was an error trying to send your message“, konnte CF7 seine E-Mail nicht senden.
Beheben Sie den E-Mail-Versand Ihrer WordPress-Website, zum Beispiel mit einem SMTP-Plugin. Sobald CF7 seine E-Mail senden kann, erreicht der Lead MarbleSend.
Warum trägt ein Kontakt seine E-Mail-Adresse als Namen?
Das Formular hat kein Namensfeld, oder es ist kein Namensfeld zugeordnet. Die MarbleSend-API verlangt einen Namen, deshalb erhält ein neuer Kontakt den Teil der E-Mail vor dem @.
Sehen Sie sich die Zeile des Formulars in Settings → MarbleSend Integrations an: Das Feld Name Field ist leer. Ein bereits vorhandener Kontakt ist nicht betroffen, weil er seinen Namen behält.
Fügen Sie dem Formular ein Namensfeld hinzu und tragen Sie es in die Zuordnung ein. Bereits vorhandene Kontakte behalten ihren aktuellen Namen; ändern Sie ihn bei Bedarf unter /contacts.