Offizieller technischer Leitfaden Zero-Build PHP 8.2+ Architektur Für Shared Hosting optimiert

Dokumentation & System-Enzyklopädie

Umfassender technischer Leitfaden, Verzeichnis der UI-Elemente und Shared-Hosting-Optimierungshandbuch für MarbleSend.

Filter:
Kern

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.

100% Prepared PDO

Null SQL-Injection

Jede Datenbankabfrage verwendet strikte Prepared Statements ohne ORM-Overhead.

AES-256-GCM

At-Rest-Verschlüsselung

SMTP-Zugangsdaten, KI-API-Keys und webhook-Secrets werden in Crypto.php verschlüsselt.

Atomare Warteschlange

Race-Condition-Schutz

Der Worker beansprucht Warteschlangen-Batches atomar über MySQL-Status-Updates mit strikter Deadline-Behandlung.

Zero-Build UI

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.

IMMUNITY

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.

PERFORMANCE

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.

IDEMPOTENCY

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

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

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.

RANDOM_BYTES()

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.

SECRETS CATALOG

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

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.

UNIFIED RUNNER

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 & WEB-CRON

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.

ATOMIC CLAIM

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 RECOVERY

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.

Modul 01

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 anzuzeigen
KPI-Karte 1

Gesamt gesendet

Protokollaggregation & Monatszähler
KPI-Karte 2

Geöffnet / Öffnungsrate

1x1-Tracking-Pixel & Apple MPP-Hinweis
KPI-Karte 3

Geklickt / CTR

Klick-Weiterleitungs-Injektor
KPI 04

Abgemeldete Zielgruppe

Abmelderate & RFC-Konformität
Betriebskarte 4

Worker-Heartbeat

Cron-Status & 1-Minuten-Intervall
Visualizer

Volumen-Wachstumsdiagramm

Skalierung 7T, 30T, 90T, YTD
Aktivitäts-Feed

Tabelle der letzten Broadcasts

Status-Lebenszyklus & Audit-Trail
Sicherheitsbanner

Zustellbarkeits-Zustand

SMTP-Profil-Bereitschaft

Datenbankauswirkung:

Support-Team-Profitipp:

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

Wählbare Zeiträume (7T, 30T, 90T, YTD)

Ermöglicht den sofortigen Wechsel zwischen kurzfristigem Wochenrhythmus (7 Tage), Monatszyklen (30 Tage), Quartalsergebnissen (90 Tage) und jährlichem Versandvolumen (Seit Jahresbeginn).

Leichte Flex-Balken ohne externe Abhängigkeiten

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.

Duale Metrik-Tooltip-Telemetrie

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.

Completed

status = 'completed'

Sending

status = 'sending'

Failed

status = 'failed'

Draft

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.

Campaign-Name & Herkunft

Zeigt den Betreff der Campaign, das Erstellungsdatum und das Herkunfts-Tag (manual, recurring, rss oder resend_unopened) an.

Empfänger & Zustellverhältnis

Sofortige Anzeige der zugestellten im Vergleich zu fehlgeschlagenen Nachrichten sowie prozentuale Live-Öffnungs- und Klickraten.

Link zum Analysebericht

Direkte Verknüpfung zur Seite Campaign-Bericht für ereignisbasierte Protokolle auf Empfängerebene und das Modal zum erneuten Senden an Nicht-Öffner.

1.5 Zustellbarkeits-Prüfungs-Warnbanner

Wenn Ihrer Absenderdomain verifizierte SPF-, DKIM- oder DMARC-records fehlen, hebt MarbleSend ein Hinweisfeld direkt über den KPI-Metriken hervor. Ein Klick auf Domain-DNS verifizieren öffnet den 4-stufigen Diagnoseassistenten unter /settings?tab=deliverability und verhindert, dass Nutzer die Domain-Reputation mit unauthentifizierten Postfächern beschädigen.

Überprüfung aktiver SMTP-Profile

Zeigt die Anzahl der in Settings konfigurierten aktiven SMTP-Relay-Profile an. MarbleSend unterstützt Multi-SMTP-Rotation für eine Round-Robin-Lastverteilung über mehrere Relays hinweg.

Warnung vor fehlendem Relay & Preflight-Schutz

Wird kein aktives SMTP-Profil gefunden, zeigt das Banner eine auffällige rote Warnung an, bevor Campaigns gestartet werden können, und verhindert so fatale Warteschlangenfehler.

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.

Modul 02

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 anzuzeigen
PROGRESS

Live-Versandmonitor

Echtzeit-Statistiken & Ereignisse
AUDIENCE

Empfängerauswahl

Tag-Filterung & Alles auswählen
COMPOSER

Dreifachansichts-Editor

Code, Split & Vorschau
SAFETY

Preflight-Prüfmodul

Automatisierte 6-Punkte-Prüfung
TESTING

Testversand-Diagnose

Warteschlangenfreie Live-Stichprobe
ATTRIBUTION

UTM- & Link-Rewriter

UTM-Parameter & 302-Klickverfolgung
PORTFOLIO

Sendungsarchiv

Status- & Ursprungsfilter
ANALYTICS

Detaillierter Nachversandbericht

CTR, MPP & automatischer Nachversand

Datenbankauswirkung:

Support-Team-Profitipp:

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

Sending

74% complete

7,420 / 10,000 emails

In Warteschlange

2,528

Wird gesendet

40

Erfolgreich

7,420

Fehlgeschlagen

12

Recent Events Real-time status
ana.wijaya@example.com Delivered
budi.santoso@example.org Delivered
chen.li@example.net 550 5.1.1 User unknown
dewi.lestari@example.com Delivered
eko.prasetyo@example.org Wird gesendet
View Full Report

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.

TELEMETRY NOTE

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.

PIPELINE 01

Schritt 1: UTM-Abfrageinjektion

Hängt utm_source, utm_medium, utm_campaign und utm_content an jeden Hyperlink an, ohne vorhandene Parameter zu überschreiben.

PIPELINE 02

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.

PIPELINE 03

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:

KPI METRICS

4 Bento-Leistungskennzahlen

Erfasst Gesendet-Volumen (100%), Zustellfehler, eindeutige Öffnungen mit Öffnungsrate und eindeutige Klicks mit CTR.

TEMPORAL CLUSTERS

Stündliche Interaktionskurve

Visualisiert stündliche Öffnungsspitzen in den ersten 72 Stunden, um optimale Sendezeiten für Abonnenten zu ermitteln.

ENGAGEMENT RECOVERY

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.

Modul 03

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 anzuzeigen
LEBENSZYKLUS

4-Status-Zustandsautomat

active/pending/unsub/supp
FILTERUNG

Such- & Filter-Engine

Tags, Status & Debounce
TELEMETRIE

Audit- & Einwilligungs-Drawer

IP, Zeitstempel & Bounces
IMPORT

RFC 4180 CSV-Importer

50k Zeilen & Deduplizierung
FUNNELS

Gehostete Lead-Capture-Seiten

Double-Opt-in & Trichter
AUTOMATION

Tag-Autoresponder

Ereignisbasierte Drip-Regeln
VERWALTUNG

Massenverwaltungs-Hub

Seitenübergreifende Segmentierung
COMPLIANCE

DSGVO-Datenschutz & Löschung

JSON-Export & vollständige Löschung

Datenbankauswirkung:

Support-Team-Profitipp:

3.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'.

active

Aktiver Abonnent

Bestätigtes Opt-in, gültige E-Mail. Berechtigt zum Empfang von Campaigns, Zeitplänen und Autorespondern.

pending

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.

unsubscribed

Abgemeldet

Hat auf den Abmeldelink geklickt. Wird nie wieder angeschrieben. Kann nicht manuell ohne erneutes explizites Opt-in reaktiviert werden.

suppressed

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.

Direktbearbeitung

Name, benutzerdefinierte Metadaten und Tag-Chips direkt in der Zeile ohne Neuladen bearbeiten.

Manuell unterdrücken

Einen Kontakt sofort unterdrücken, um ihn umgehend für alle Warteschlangen zu disqualifizieren.

DSGVO-Endgültiges Löschen

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.

Gesamte Seitenaufrufe

Überwacht die aggregierten Impressionen aller aktiven Anmeldetrichter.

Durchschnittliche Conversion-Rate

Berechnet das Verhältnis von Eintragungen zu Aufrufen über alle gehosteten Formulare.

Aktive Seiten / Limit

Zeigt die aktiven Landingpages im Verhältnis zum großzügigen Limit von 20 Seiten an.

Eintragungen (30 Tage)

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.

Double-Opt-In-Engine

Generiert HMAC-signierte Bestätigungs-tokens mit automatisiertem Versand von Bestätigungs-E-Mails.

Automatisches Tagging

Weist bei der Anmeldung festgelegte Abonnenten-Tags zu, um maßgeschneiderte Drip-Sequenzen auszulösen.

Benutzerdefinierte Weiterleitung

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.

Modul 04

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 anzuzeigen
SIDEBAR

Template-Bibliothek

Echtzeitsuche & Slug-Schlüssel
PRESETS

Starter-Layouts

8 tabellenbasierte E-Mail-Layouts
EDITOR

Reiner Code-Editor

Tab-Einrückung & Formatierer
VORSCHAU

Isolierter Viewport

Desktop- & Smartphone-Rahmen
TOKENS

Dynamische Token-Palette

1-Klick-Placeholder-Einfügung
DIAGNOSE

Test-E-Mail-Absender

Live-SMTP-Prüfungsmodal
AI COPY

AI-Copywriter-Drawer

Templates generieren & verfeinern
AI AUDIT

Betreff-Prüfer

1–100 Punkte & Spam-Audit
BEITRÄGE

News-Beiträge

Markdown-Artikel für Newsletter

Datenbankauswirkung:

Support-Team-Profitipp:

4.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:

1. Minimal Blank

Leere Vorlage mit erforderlichem Abmelde-Footer.

2. Product Launch

Hero-Banner, Leistungsversprechen, markanter CTA.

3. Monthly Newsletter

Kuratierter Leitartikel, 2-spaltige Beitrags-Highlights.

4. News-Beiträge-Newsletter

Kopfband plus der {{news_posts}}-Block für Zeitpläne mit News-Beiträgen.

5. Welcome Series

Persönliches Onboarding, 3-Schritte-Einstieg.

6. Webinar Invitation

Datums-/Uhrzeit-Badge, Referenten-Biografie, RSVP-Button.

7. Blog Digest

Nummerierte Artikel, Lesezeit, Autoren-Tags.

8. Win-Back Offer

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.

{{name}}

Vollständiger Name des Empfängers (Standardwert "there", falls leer)

{{email}}

E-Mail-Adresse des Empfängers

{{unsubscribe_link}}

Obligatorischer 1-Klick-Abmeldelink nach RFC 8058

{{confirm_link}}

Double-Opt-In-Bestätigungs-URL für Anmeldeseiten

{{posts}}

RSS-Postingschleife für automatisierte Newsletter-Ausgaben

{{feed_title}}

Titel des angebundenen RSS/Atom-Feeds

{{latest_post_title}}

Titel des zuletzt publizierten Blogbeitrags

{{posts_count}}

Anzahl der neuen Feed-Einträge im Newsletter

{{news_posts}}

Block mit News-Beiträgen für einen Newsletter-Zeitplan (Titelbild, Titel, Untertitel, Text)

{{news_posts_count}}

Anzahl der News-Beiträge in diesem Versand

{{news_latest_post_title}}

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:

6.7 Dual-Mode KI-Engine: BYOK-Anbieter & MarbleSend KI-Credits

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.

BereichWas er tut
BibliothekListet 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, TitelbildDer 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-SchalterEntwurf-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-EditorDie 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-VorschauRendert 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-ShortcutEine 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.

SyntaxErgebnis
## 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
> quoteBlockzitat
---Trennlinie
![alt](https://example.com/a.png)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.

PlatzhalterWird 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

SymptomWas zu prüfen ist
Die Vorschau zeigt keine ArtikelDie 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 anklickbarSchreiben Sie ihn als [text](https://…) mit einer http-, https- oder mailto-Adresse; andere Schemata bleiben Text.
Ein Bild erscheint nichtDie Adresse muss mit https beginnen und öffentlich erreichbar sein. Manche Mail-Apps blockieren zudem externe Bilder, bis der Leser sie erlaubt.
Module 05

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

Interactive Inspector
KALENDER

Kalender & Monatsmatrix

Visuelle Zeitplan- & Taktungskarte
TAKTUNG

Wiederholungs-Engine

Täglich, wöchentlich, monatlich & benutzerdefiniert
RSS / ATOM

Automatisierter Blog-Poller

Hash-Deduplizierung & Cache
AUDIENCE

Dynamische Empfänger

Tag-Abfrage zur exakten Ausführungssekunde
AUDIT

Ereignis-Logs

Ausführungs-Audit & Duplikatschutz
AUSFÜHRUNG

Sofortstart Run Now

Sofortiger Versand ohne Taktungsverschiebung
OPTIMIERUNG

Hosting-Optimierung

8 kuratierte Betriebsrichtlinien
WORKER

Cron-Heartbeat & Sperre

Nicht-blockierende Parallelitätssperre
BEITRÄGE

News-Beiträge-Modus

Newsletter im Substack-Stil

Datenbankauswirkung:

Support-Team-Profitipp:

5.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:

1. Optimale morgendliche Versandfenster

Planen Sie Aussendungen dienstags oder donnerstags zwischen 09:00 und 10:30 Uhr Ortszeit der Empfänger für maximale Öffnungs- und Klickraten.

2. 1-Minuten-Cron-Worker-Präzision

Führen Sie worker.php jede Minute (* * * * *) mit flock-Schutz aus, um sekundengenaue Taktung ohne Prozesskollisionen zu gewährleisten.

3. Atomare Warteschlangen-Stapelreservierung

Fragen Sie cm_email_queue mit indexierten vorbereiteten Statements samt LIMIT-Klausel ab, um Race Conditions bei Lastspitzen auszuschließen.

4. Zeitzonen-Tag-Segmentierung der Abonnenten

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.

5. RSS-Veröffentlichungs-Pufferverzögerung

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.

6. Regelmäßige Bereinigung des Ereignisverlaufs

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.

7. 48-Stunden-Wiederversand an Nicht-Öffner

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.

8. Isolierung durch dediziertes SMTP-Profil-Routing

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. 1Öffnen Sie Vorlagen → Beiträge und schreiben Sie Ihren Artikel in Markdown.
  2. 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. 3Öffnen Sie Zeitpläne → Neu, lassen Sie den Typ auf Newsletter und setzen Sie Inhaltsquelle auf „News-Beiträge“.
  4. 4Wählen Sie Vorlage, Zielgruppe, SMTP-Profil, Beiträge pro E-Mail (1–20) und Taktung.
  5. 5Speichern. Nur Beiträge, die nach diesem Zeitpunkt Bereit werden, kann dieser Zeitplan senden.
  6. 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.

Beispiel: Sie speichern den Zeitplan am Montag. Ein Beitrag, der am Freitag Bereit wurde, wird ignoriert; einer, der am Dienstag Bereit wird, wird beim nächsten Durchlauf gesendet und danach von diesem Zeitplan nie wieder.

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

SymptomWas zu prüfen ist
Mein Bereit-Beitrag wurde nicht gesendetPrü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 habeDer 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}} enthaltenFü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 sendenKopieren Sie seinen Text in einen neuen Beitrag und markieren Sie diesen als Bereit — ein Zeitplan sendet denselben Beitrag nie zweimal.
Modul 06

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

Interactive Inspector
SMTP

SMTP-Profile

BYO SMTP & Verwaltetes SES-Relay
WORKER

Worker & Cron

1-Minuten-Ausführungstakt
LOCALES

23 Sprachen & Theme

RTL-Spiegelung & Dunkel/Hell
API KEYS

REST-API-Schlüssel

Berechtigter Entwicklerzugriff
WEBHOOKS

Ereignis-Webhooks

HMAC-SHA256-Ereignis-Push
DELIVERABILITY

Zustellbarkeits-Suite

SPF, DKIM, DMARC & BIMI
AI BYOK

AI-Anbieter

BYOK & MarbleSend Credits
LICENSE

Ed25519-Lizenz

Kryptografisches Grant-Token

Datenbankauswirkung:

Support-Team-Profitipp:

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

Option 1: BYO SMTP (Eigene Relais-Infrastruktur)

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 & Vergleich

Verbinden Sie Ihren eigenen Mail-Transport mit Standard-SMTP-Zugangsdaten. Wählen Sie zwischen Cloud-Relays oder Hosting-Mailboxen.

Wichtiger Transparenzhinweis: Sendelimits bei Shared Hosting

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.

Host: smtp.hostinger.com | Port 465 (SSL) / 587 (TLS)
Business Email Plans (Per Mailbox)
Free Business Email Rp0 / mo

1 GB storage, 1 forwarding rule, 1 alias, up to 100 mailboxes/domain. Standard webmail & antispam. Strict sending cap (~100-200/day).

Starter Business Email Rp7.900 / mo

5 GB storage, 5 forwarding rules, 5 aliases, expandable mailbox storage. No mailbox limit per domain.

Standard Business Email Rp10.900 / mo

20 GB storage, 20 forwarding rules, 10 aliases, AI Kodee mailbox assistant & smart replies.

Premium Business Email Rp19.900 / mo

50 GB storage, 50 forwarding rules, 30 aliases, full AI suite & priority deliverability.

Hostinger Reach (Email Marketing)
Starter Marketing Rp23.900 / mo

100 recipients, 200 emails / month. Suitable for basic transactional testing.

Grow Marketing Rp36.900 / mo

500 recipients, 500 emails / month, 10 AI credits, remove Reach branding, automations.

Pro Marketing Rp54.900 / mo

1,000 recipients, 7,000 emails / month, 20 AI credits, custom HTML code, send-time optimization.

Namecheap Jellyfish / cPanel

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

View Namecheap Email
Bluehost cPanel / M365

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

View Bluehost Email
SiteGround Site Tools

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

View SiteGround Email
DreamHost Custom Panel

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

View DreamHost Email
HostGator cPanel

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

View HostGator Email
GoDaddy Microsoft 365

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

View GoDaddy Email

Wählen Sie den passenden Port und Sicherheitsstandard für Ihr Netzwerk.

Port 587 (STARTTLS) STANDARD

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.

Port 465 (SSL / SMTPS) ENCRYPTED

Implicit TLS/SSL wrapper connection (RFC 8314). Required by Hostinger, Namecheap cPanel, and selected enterprise relays. Highly reliable when hosting firewalls restrict 587.

Port 25 (Plain / MTA) BLOCKED

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 SES

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

Option 2: MarbleSend SMTP via Amazon SES (Verwaltetes Relay)

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.

Atomares Guthaben-Hauptbuch, Idempotenz & Automatische Rückerstattung

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.

Echtzeit-TLS-Socket-Diagnose & Detailliertes Protokoll
Easy DKIM

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.

Pro-Kampagnen-Routing & Nahtloser Standard-Fallback

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.

Absender-Domain-Verifizierung (SPF, DKIM, DMARC)

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.

Absenderidentität

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.

Abmeldung in jeder E-Mail

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.

Einwilligungsbasierte Listen

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.

Bounces und Beschwerden

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.

Limits und automatische Pause

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.

Authentifizierter Versand

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 Anbieter-Playbook

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

RULE 2
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.

RULE 3
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.

DNS-Verifizierungsbefehle (CLI)
# 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
Hostinger hPanel → Domains → Domain wählen → DNS / Nameserver
Eintragstyp Host / Name Wert / Ziel / Verweist auf TTL
CNAME <token>._domainkey (hPanel auto-appends .yourdomain.com) <token>.dkim.amazonses.com 300 (or 14400)
1

Melden Sie sich im Hostinger hPanel-Dashboard an und navigieren Sie zu Domains.

2

Wählen Sie Ihre Domain aus und klicken Sie in der linken Seitenleiste auf DNS / Nameserver.

3

Wählen Sie unter DNS-Einträge verwalten im Dropdown-Menü Typ den Eintrag CNAME.

4

Geben Sie im Feld Name NUR token._domainkey ein (hPanel hängt .ihredomain.de automatisch an).

5

Tragen Sie im Feld Ziel token.dkim.amazonses.com ein und belassen Sie die TTL bei 300 oder Standard (14400).

6

Klicken Sie auf Eintrag hinzufügen. Wiederholen Sie den Vorgang für alle 3 Tokens aus MarbleSend.

Hostinger hPanel zeigt Ihre Domain ausgegraut neben dem Eingabefeld an. Fügen Sie Ihren Domainnamen oder zusätzliche Punkte nicht manuell im Feld Name hinzu.
DreamHost (DreamHost Web Panel)
DreamHost Web Panel
DreamHost Panel → Websites → Websites verwalten → DNS-Einstellungen (oder Domains → Domains verwalten → DNS)
Eintragstyp Host / Name Wert / Ziel / Verweist auf TTL
CNAME <token>._domainkey (DreamHost appends .yourdomain.com) <token>.dkim.amazonses.com Default
1

Melden Sie sich im DreamHost Web Panel an und navigieren Sie zu Websites > Websites verwalten.

2

Suchen Sie Ihre Domain und klicken Sie auf DNS-Einstellungen (oder Domains > Domains verwalten > DNS).

3

Scrollen Sie nach unten zum Abschnitt "Benutzerdefinierten DNS-Eintrag hinzufügen" und klicken Sie auf Eintrag hinzufügen.

4

Tragen Sie im Feld Name token._domainkey ein (DreamHost zeigt .ihredomain.de automatisch an).

5

Setzen Sie Typ auf CNAME und tragen Sie token.dkim.amazonses.com im Feld Wert ein.

6

Klicken Sie auf Speichern / Eintrag hinzufügen. Wiederholen Sie dies für alle 3 Tokens.

DNS-Aktualisierungen bei DreamHost können bis zu 1–2 Stunden dauern, um vollständig im internen Nameserver-Cluster synchronisiert zu werden.
Namecheap (Erweitertes DNS)
Advanced DNS
Namecheap Dashboard → Domain-Liste → Verwalten → Tab Erweitertes 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)
1

Melden Sie sich bei Namecheap an, öffnen Sie die Domain-Liste und klicken Sie neben Ihrer Domain auf Verwalten.

2

Wechseln Sie oben auf der Seite zur Registerkarte Advanced DNS.

3

Klicken Sie im Bereich Host Records auf die rote Schaltfläche ADD NEW RECORD.

4

Wählen Sie CNAME Record aus dem Dropdown-Menü Type.

5

Geben Sie im Feld Host NUR token._domainkey ein (geben Sie niemals Ihren Domainnamen ein).

6

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.

Wenn Ihre Domain benutzerdefinierte DNS-Nameserver nutzt, ist diese Registerkarte deaktiviert; fügen Sie die Einträge bei Ihrem aktiven DNS-Host ein.
Bluehost (Account Manager / Zone Editor)
Bluehost DNS
Bluehost Portal → Domains → DNS (oder cPanel → Zone Editor)
Eintragstyp Host / Name Wert / Ziel / Verweist auf TTL
CNAME <token>._domainkey (Bluehost handles suffix automatically) <token>.dkim.amazonses.com 4 Hours (or Default)
1

Melden Sie sich im Bluehost Account Manager an, klicken Sie auf Domains und wählen Sie Ihre Domain.

2

Navigieren Sie zum Tab DNS (oder öffnen Sie den cPanel Zone Editor bei Legacy-Hosting).

3

Scrollen Sie zum Abschnitt CNAME (Alias) und klicken Sie auf Eintrag hinzufügen.

4

Tragen Sie im Feld Host Record token._domainkey ein.

5

Geben Sie bei Verweist auf token.dkim.amazonses.com ein und wählen Sie die TTL (4 Stunden oder Standard).

6

Klicken Sie auf Speichern. Wiederholen Sie dies für die 2 verbleibenden CNAME-Tokens.

Bluehost verarbeitet das Domain-Suffix automatisch im Hintergrund. Geben Sie niemals die vollständige Domain in das Feld Host Record ein.
SiteGround (Site Tools DNS-Zonen-Editor)
Site Tools DNS
SiteGround Kundenbereich → Websites → Site Tools → Domain → DNS-Zonen-Editor
Eintragstyp Host / Name Wert / Ziel / Verweist auf TTL
CNAME <token>._domainkey (Site Tools appends .yourdomain.com) <token>.dkim.amazonses.com 1 hour (3600)
1

Melden Sie sich im SiteGround-Kundenbereich an, gehen Sie zu Websites und öffnen Sie Site Tools für Ihre Domain.

2

Erweitern Sie in der linken Seitenleiste Domain und klicken Sie auf DNS-Zonen-Editor.

3

Wählen Sie unter Neuen Eintrag erstellen die Registerkarte CNAME.

4

Tragen Sie im Feld Name token._domainkey ein (Site Tools hängt .ihredomain.de automatisch an).

5

Tragen Sie im Feld Löst auf token.dkim.amazonses.com ein und belassen Sie die TTL bei 1 Stunde (3600).

6

Klicken Sie auf Erstellen. Wiederholen Sie dies für alle 3 Tokens.

Die Nameserver von SiteGround aktualisieren sich in wenigen Sekunden. Stellen Sie sicher, dass keine alten TXT-Einträge auf derselben Selektor-Subdomain vorhanden sind.
HostGator (cPanel Zone Editor)
cPanel Zone Editor
HostGator Portal → cPanel → Domains → Zone Editor
Eintragstyp Host / Name Wert / Ziel / Verweist auf TTL
CNAME <token>._domainkey (cPanel automatically appends dot) <token>.dkim.amazonses.com 14400 (or 3600)
1

Melden Sie sich im HostGator-Kundenportal an und starten Sie cPanel.

2

Klicken Sie im Bereich Domains auf Zone Editor.

3

Suchen Sie Ihre Domain und klicken Sie auf + CNAME-Eintrag (oder Verwalten > Eintrag hinzufügen).

4

Tragen Sie im Feld Name token._domainkey ein (cPanel ergänzt automatisch Ihre Domain mit einem Punkt am Ende).

5

Tragen Sie im Feld CNAME / Record token.dkim.amazonses.com ein.

6

Klicken Sie auf CNAME-Eintrag hinzufügen. Wiederholen Sie dies für alle 3 Tokens.

Überprüfen Sie im cPanel Zone Editor in der Eintragsliste, dass der Name als token._domainkey.ihredomain.de. ohne doppelte Domain aufgeführt ist.
GoDaddy (Domain-Portfolio DNS)
GoDaddy DNS
GoDaddy-Konto → Meine Produkte → Domains → DNS (oder DNS verwalten)
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)
1

Melden Sie sich in Ihrem GoDaddy-Konto an und öffnen Sie Meine Produkte.

2

Suchen Sie unter Domains Ihre Domain und klicken Sie auf DNS (oder die drei Punkte > DNS verwalten).

3

Klicken Sie im Bereich DNS-Einträge auf Neuen Eintrag hinzufügen.

4

Wählen Sie CNAME aus dem Dropdown-Menü Typ.

5

Geben Sie im Feld Name NUR token._domainkey ein (fügen Sie nicht .ihredomain.de hinzu!).

6

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.

GoDaddy hängt Ihren Domainnamen automatisch an. Die Eingabe der vollständigen Domain führt zu einem DNS-Syntaxfehler oder einem ungültigen doppelten Eintrag.
Verifizierung & DNS-Propagierung

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.

Schritt 1: Kopieren Sie Ihre Cron-Zeile

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

Schritt 2: Im Hosting-Panel hinzufügen

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)
  1. Öffnen Sie hPanel → Websites → Dashboard Ihrer Website und klicken Sie in der Seitenleiste auf Cron Jobs.
  2. Stellen Sie Type auf Custom. (Der Typ PHP nimmt nur den Pfad einer .php file; Ihre Zeile enthält auch den PHP-Befehl.)
  3. Fügen Sie die Zeile aus Schritt 1 in Command to run ein.
  4. Stellen Sie den Zeitplan auf jede Minute oder geben Sie * * * * * ein.
  5. 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.

  1. Öffnen Sie cPanel und klicken Sie im Bereich Advanced auf Cron Jobs.
  2. Wählen Sie unter Add New Cron Job in Common Settings die Option Once Per Minute (* * * * *).
  3. Fügen Sie die Zeile aus Schritt 1 in Command ein.
  4. 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
  1. Melden Sie sich im Bluehost Portal an, klicken Sie auf Websites und dann auf Manage Site für Ihre Website.
  2. Öffnen Sie den Tab Advanced, suchen Sie Cron Jobs und klicken Sie auf Manage und dann auf Add Cron.
  3. Wählen Sie unter Common Settings eine Häufigkeit (oder füllen Sie Minute, Hour, Day, Month und Weekday aus).
  4. 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.

  1. Öffnen Sie cPanel und klicken Sie im Bereich Advanced auf Cron Jobs.
  2. Wählen Sie unter Add New Cron Job in Common Settings die Option Once Per Minute (* * * * *).
  3. Fügen Sie die Zeile aus Schritt 1 in Command ein.
  4. 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.

  1. Öffnen Sie cPanel und klicken Sie im Bereich Advanced auf Cron Jobs.
  2. Wählen Sie unter Add New Cron Job in Common Settings die Option Once Per Minute (* * * * *).
  3. Fügen Sie die Zeile aus Schritt 1 in Command ein.
  4. 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
  1. Öffnen Sie das DreamHost-Panel, gehen Sie zu Cron Jobs und klicken Sie auf Add New Cron Job.
  2. 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.
  3. 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).
  4. 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
  1. Öffnen Sie Site Tools → Devs → Cron Jobs.
  2. Wählen Sie das Intervall aus der Liste (oder legen Sie Minute, Stunde, Tag, Monat und Wochentag fest).
  3. Fügen Sie die Zeile aus Schritt 1 in Command ein. Eine E-Mail-Adresse für die Ausgabe ist optional.
  4. 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.

Kein Cron-Zugriff, oder Ihr Anbieter schränkt ihn ein? Nutzen Sie Web-Cron
  1. Öffnen Sie Settings → System und kopieren Sie die Web-Cron URL. Halten Sie sie geheim: Sie enthält Ihr geheimes Token.
  2. Erstellen Sie ein kostenloses Konto bei einem Cron-Dienst wie cron-job.org.
  3. Legen Sie einen Job an, fügen Sie die URL ein und stellen Sie ihn auf jede Minute. Speichern und aktivieren Sie ihn.
  4. Nutzen Sie entweder Web-Cron oder einen Cron-Job Ihres Anbieters, nicht beides: eines genügt.
Schritt 3: Prüfen, ob es funktioniert

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.

Zeigt weiterhin Cron nicht erkannt?
  • 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.

Nativer CLI-Crontab (Option A)
* * * * * 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.

HTTP-Web-Cron-Fallback (Option B)
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.

Nicht-blockierender flock-Concurrency-Guard

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.

Atomare Warteschlangen-Beanspruchung

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.

Abhängigkeitsfreie 23 Native Sprachen

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.

Bidirektionale RTL-Layout-Spiegelung

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.

Persistente Tri-State-Theme-Engine

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.

Gehärtete Single-Admin-Sicherheit

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

So funktioniert es

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.

Schritt für Schritt aktivieren

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.

Der QR-Code bleibt auf Ihrem Server

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.

Anmelden mit Code

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.

Wiederherstellungscodes

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.

Smartphone verloren und keine Wiederherstellungscodes

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.

1 Cloudflare-Konto erstellen oder anmelden

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

2 Turnstile öffnen und Widget hinzufügen

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

3 Widget benennen und Hostnamen eintragen

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.

4 Widget-Modus wählen

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.

5 Die beiden Schlüssel kopieren

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.

6 In MarbleSend einfügen

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

7 Testen

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

Wenn Cloudflare nicht erreichbar ist

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.

Testschlüssel für die Entwicklung

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.

Fehlerbehebung

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.

Erforderlich, solange Sie das SES Relay nutzen

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.

Token-Generierung & Schreibgeschützte Anzeige

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.

Einweg-SHA-256-Hash-Speicherung

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.

Granulare Berechtigungs-Scopes

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.

Bearer-Authentifizierung & Audit-Logs

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.

Lifecycle-Ereignisabonnements

Abonnieren Sie wichtige Auslöser: contact.created, contact.unsubscribed, campaign.sent, campaign.bounced und link.clicked mit individueller Aktivierung pro Webhook.

HMAC-SHA256-Signatur-Header

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.

Circuit Breaker & Wiederholungsmechanismus

Fehlgeschlagene Webhook-Zustellungen (HTTP 5xx oder Timeouts) lösen exponentielle Wiederholungsversuche aus. Endpunkte mit aufeinanderfolgenden Fehlern werden automatisch pausiert, um Serverlast zu vermeiden.

Zustellungs-Auditverlauf & Test-Ping

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.

1. SPF (Sender Policy Framework)

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

2. DKIM (DomainKeys Identified Mail)

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

3. DMARC-Richtlinie & Ausrichtung

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.

4. BIMI-Markenavatar & VMC

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.

BYOK Modus 1: BYOK (Bring Your Own Key)

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.

METERED Modus 2: MarbleSend KI-Credits (Kuratierte Modelle)

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.

DYNAMIC Dynamic Edge Pricing & Instant Checkout

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.

PRIVACY AES-256-GCM Key Vault & Strict Data Privacy

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.

MarbleSend AI (Verwalteter Relay)

Konfigurationsfreier Zugriff auf erstklassige, speziell für E-Mail-Konvertierung bewertete kuratierte Modelle. Keine externen Entwicklerkonten oder API-Schlüssel erforderlich.

BYOK (Eigener Schlüssel)

Direkte Server-zu-Anbieter-Kommunikation ohne Aufschläge. Wählen Sie einen konfigurierten Anbieter und eine spezifische Modellkennung als Standard-Engine aus.

Einheitliche Generierungs-Pipeline

Templates Studio, AI Subject Score Inspector und AI Assist greifen automatisch auf die aktive Standardauswahl mit benutzerfreundlichem Fallback bei Guthabenerschöpfung zu.

Systemstatus-Persistenz

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.

Kostenlose Starter-Guthabenzuweisung

Jede aktivierte Lizenz erhält automatisch kostenlose Starter-Guthaben vom Lizenzserver, um die AI-Assist-Funktionen sofort testen zu können.

Atomares Ledger & Idempotenz

Generierungen werden exakt mit 1 Guthaben pro Anfrage über cm_addon_ledger abgerechnet. Eindeutige Transaktions-UUIDs verhindern Doppelabbuchungen bei Verbindungswiederholungen.

Dynamischer Edge-Preiskatalog & Aufladung

Guthabenpakete (z. B. ai_100) werden dynamisch aus dem Vendor-Edge-Katalog geladen. Zahlungen werden sicher über unseren Zahlungsdienstleister abgewickelt.

Echtzeit-Guthaben & 1-Klick-Synchronisierung

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.

Multi-Vendor-Register

Verwalten Sie gleichzeitige Verbindungen zu OpenAI, Anthropic Claude, Google Gemini, DeepSeek, Kimi/Moonshot, OpenRouter oder privaten Ollama-Instanzen.

Duale Protokolle & Eigene Basis-URLs

Unterstützt OpenAI-kompatible Standard-Endpunkte (/chat/completions) und das Anthropic-Nachrichtenformat (/v1/messages) mit benutzerdefinierten Proxy-Basis-URLs.

Kryptografischer AES-256-GCM-Tresor

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.

Echtzeit-Preflight-Diagnose

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:

OpenAI GPT-4o / o-series
Format: openai
Base URL: https://api.openai.com/v1
Steps: Melden Sie sich auf platform.openai.com an → öffnen Sie das Dashboard → wählen Sie links "API keys" → klicken Sie auf "+ Create new secret key" → vergeben Sie den Namen "MarbleSend" → kopieren Sie den Key (beginnt mit sk-...). Modell-IDs finden Sie auf platform.openai.com/docs/models.
Anthropic Claude Claude 3.5 / 3.7 Sonnet
Format: anthropic
Base URL: https://api.anthropic.com/v1
Steps: Auf console.anthropic.com anmelden → zu Settings → "API Keys" navigieren → "Create Key" anklicken → als "MarbleSend" benennen → Key kopieren (beginnt mit sk-ant-...). Aktuelle Claude-IDs finden Sie unter docs.anthropic.com/en/docs/about-claude/models.
Google Gemini Gemini 2.0 / 2.5 Flash
Format: gemini
Base URL: https://generativelanguage.googleapis.com/v1beta
Steps: Mit Google-Konto auf aistudio.google.com einloggen → in der Navigation auf "Get API key" klicken → "Create API key" wählen → Key kopieren (beginnt mit AIzaSy...). Besuchen Sie ai.google.dev/gemini-api/docs/models/gemini für Modell-Listen.
DeepSeek DeepSeek-V3 / R1
Format: openai
Base URL: https://api.deepseek.com
Steps: Auf platform.deepseek.com anmelden → im Menü "API keys" wählen → auf "Create API key" klicken → Name "MarbleSend" eingeben → Key kopieren (beginnt mit sk-...). Modell-IDs finden Sie unter api-docs.deepseek.com.
Kimi (Moonshot AI) Kimi k1.5 / Moonshot v1
Format: openai
Base URL: https://api.moonshot.cn/v1
Steps: Auf platform.moonshot.cn anmelden → Konsole öffnen → "API Key Management" (API Key 管理) wählen → auf "Create" (新建) klicken → Token kopieren. Modell-IDs unter platform.moonshot.cn/docs einsehen.
OpenRouter Aggregator (200+ Models)
Format: openai
Base URL: https://openrouter.ai/api/v1
Steps: Auf openrouter.ai anmelden → zu Account → "Keys" navigieren → "Create Key" wählen → optionales Limit setzen → Key kopieren (beginnt mit sk-or-v1-...). Unter openrouter.ai/models über 100 Modelle zentral ansteuern.
Ollama & Local / Groq Local LLM / Ultra-Fast LPU
Format: openai
Base URL: http://localhost:11434/v1 / https://api.groq.com/openai/v1
Steps:
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:

1 1. Settings ➔ Reiter AI Providers öffnen

Klicken Sie in der Seitenleiste auf Settings und wechseln Sie in den Reiter "AI Providers" (direkt unter /settings).

2 2. Quick Add Preset nutzen oder "+ Add Provider"

Klicken Sie auf ein Quick-Add-Preset (OpenAI, DeepSeek, Gemini, Anthropic usw.) zur automatischen Vorbelegung oder auf "+ Add Provider".

3 3. Protokoll-Format & Base URL prüfen

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.

4 4. API-Key sicher einfügen

Fügen Sie Ihren Secret-Key ein. MarbleSend verschlüsselt alle Keys mit AES-256-GCM via Crypto.php ohne Klartext-Speicherung.

5 5. Modell-ID festlegen & Test Connection ausführen

Tragen Sie die Modell-ID und das Kontextfenster ein und klicken Sie auf "Test Connection", um einen Live-Handshake durchzuführen.

6 6. Standard-Modell aktivieren

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.

Ed25519-Signaturverifizierung

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.

Domain- & Tier-Bindung

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.

7-tägige Offline-Schonfrist

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.

Soft-Lock-Richtlinie

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.

Automatische Update-Prüfung

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 und Update-E-Mails

„Ä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.

Support-Reduzierungs-Playbook

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?

Ursache:

Der OS-Crontab wird nicht ausgeführt, der PHP CLI-Pfad ist fehlerhaft oder ein veraltetes Sperr-File verhindert die Ausführung.

Diagnose & Mechanismus:

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.

Praktische Anleitung & Behebung:

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?

Ursache:

Apple Mail Privacy Protection (MPP) Prefetching, Proxy-Caching, Bildblockierung durch Empfänger oder Adblocker, die UTM-Parameter entfernen.

Diagnose & Mechanismus:

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.

Praktische Anleitung & Behebung:

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?

Ursache:

Laufzeitbegrenzungen von PHP CLI oder Webserver im Shared-Hosting (max_execution_time 30s/60s) während umfangreicher Versendungen.

Diagnose & Mechanismus:

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.

Praktische Anleitung & Behebung:

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?

Ursache:

Fehlender Pflicht-Token {{unsubscribe_link}}, ungültige Betreffzeile, keine aktiven Empfänger gewählt oder unvollständige Syntax-Platzhalter.

Diagnose & Mechanismus:

Die Preflight-Engine bewertet 6 essenzielle Compliance- und Deliverability-Vektoren, bevor der Statusübergang zu queued oder sending gestattet wird.

Praktische Anleitung & Behebung:

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?

Ursache:

Die Schaltfläche im Campaign-Bericht bleibt deaktiviert, solange der Versand läuft oder eine angemessene Abkühlzeit noch nicht verstrichen ist.

Diagnose & Mechanismus:

MarbleSend setzt den Status campaign = completed voraus und empfiehlt mindestens 24 bis 48 Stunden Wartezeit für Empfänger in abweichenden Zeitzonen.

Praktische Anleitung & Behebung:

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?

Ursache:

Ungültige E-Mail-Syntax nach RFC 5322, Duplikate bei aktivem "Skip Duplicates", Nicht-UTF-8-Kodierung oder gesperrte Contacts.

Diagnose & Mechanismus:

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.

Praktische Anleitung & Behebung:

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?

Ursache:

Dauerhafte Zustellungsfehler (SMTP-Fehlercodes 5xx: Postfach existiert nicht) gegenüber vorübergehenden Fehlern (SMTP-Fehlercodes 4xx: Postfach voll, Rate-Limit).

Diagnose & Mechanismus:

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.

Praktische Anleitung & Behebung:

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?

Ursache:

Microsoft Outlook unter Windows verwendet die Rendering-Engine von Microsoft Word (MSO), die CSS Flexbox, Grid, margin auto und HTML5-Layout-Tags ignoriert.

Diagnose & Mechanismus:

Word MSO interpretiert ausschließlich traditionelle tabellenbasierte Layouts (verschachtelte <table>, <tr>, <td>) mit festen Breiten und Inline-Styles.

Praktische Anleitung & Behebung:

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?

Ursache:

Die reine HTML-Dateigröße der E-Mail übersteigt das strikte 102-KB-Limit (104.448 Bytes) von Gmail.

Diagnose & Mechanismus:

Bei Überschreitung von 102 KB schneidet Gmail die Nachricht ab, wodurch Inhalte, der Abmelde-Link im Footer sowie der Tracking-Pixel verborgen werden.

Praktische Anleitung & Behebung:

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?

Ursache:

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.

Diagnose & Mechanismus:

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.

Praktische Anleitung & Behebung:

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?

Ursache:

Feed-URL war nicht erreichbar, Feed-XML-Syntax war fehlerhaft oder die Beitrags-GUID stimmte mit cm_schedules.last_rss_item_id überein.

Diagnose & Mechanismus:

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.

Praktische Anleitung & Behebung:

Ö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?

Ursache:

Mehrere geplante Ausführungsintervalle sind verstrichen, während der Worker-Prozess inaktiv war.

Diagnose & Mechanismus:

MarbleSend erzwingt eine strikte "Single Catch-Up Policy" im SchedulerService. Statt alle verpassten Läufe nachzuholen, wird lediglich der jüngste Termin ausgeführt.

Praktische Anleitung & Behebung:

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?

Ursache:

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.

Diagnose & Mechanismus:

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

Praktische Anleitung & Behebung:

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?

Ursache:

Der Versand wird pro Zeitplan erfasst, nicht pro Beitrag.

Diagnose & Mechanismus:

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

Praktische Anleitung & Behebung:

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"?

Ursache:

Falsche SMTP-Zugangsdaten, abweichende Port- und Verschlüsselungspaare (Port 587 STARTTLS vs Port 465 SSL) oder unbestätigte Absender-Adresse.

Diagnose & Mechanismus:

Settings → SMTP bietet einen Live-Socket-Test, der die direkte Kommunikation zwischen PHPMailer und Ihrem SMTP-Server darstellt.

Praktische Anleitung & Behebung:

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?

Ursache:

Fehlende DNS-Einträge der Absender-Domain, Überschreiten des 10-Lookup-Limits bei SPF oder Selektor-Abweichungen bei DKIM.

Diagnose & Mechanismus:

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.

Praktische Anleitung & Behebung:

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?

Ursache:

Der Ziel-Endpunkt hat wiederholt HTTP-5xx-Fehler, Timeouts (>10s) oder 404-Statuscodes zurückgegeben.

Diagnose & Mechanismus:

Um eine Überlastung der Server-Warteschlange zu verhindern, erfasst MarbleSend Fehlversuche und pausiert den Webhook (enabled = 0) nach mehreren Fehlschlägen.

Praktische Anleitung & Behebung:

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?

Ursache:

Netzwerkunterbrechungen, DNS-Probleme oder temporäre Wartungsarbeiten am zentralen Lizenzserver.

Diagnose & Mechanismus:

Die Lizenz wird lokal im Arbeitsspeicher über libsodium sodium_crypto_sign_verify_detached() geprüft. Manuelle Manipulationen der Datenbank zerstören die Signatur.

Praktische Anleitung & Behebung:

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-Plugin & REST API

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.

Interactive Inspector
REST API

REST-API-Brücke

Keine gemeinsame Datenbank
WP-CRON

Versandwarteschlange

Transient-Speicher
NATIVE

MarbleSend Form

Shortcode, Block & Widget
WPFORMS

WPForms-Hook

wpforms_process_complete
CF7

Contact-Form-7-Hook

wpcf7_mail_sent
FLUENT

Fluent-Forms-Hook

submission_inserted
FORMIDABLE

Formidable Forms

frm_after_create_entry
FORMINATOR

Forminator-Hook

submit_before_set_fields
AUTOMATION

Tag-Autoresponder

Tags und Willkommens-E-Mails

Datenbankauswirkung:

Support-Team-Profitipp:

VORAUSSETZUNG

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

Ohne das Plugin gibt es in wp-admin keine Seite MarbleSend Integrations, und Ihre WordPress-Formulare können ihre Einsendungen nicht an MarbleSend senden.

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.

Keine gemeinsame Datenbank

WordPress liest nie MarbleSend-Tabellen, und MarbleSend liest nie wp_posts oder wp_users. Beide können auf getrennten Hosts mit getrennten Datenbanken laufen.

API-Key mit begrenztem Scope

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.

Verbindungstest

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.

Upsert und Tag-Zusammenführung

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.

API Ingestion Endpoint (cURL Example)
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.

Nichts Langsames in der Anfrage des Besuchers

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.

WP-Cron sendet die Warteschlange

Ein WP-Cron-Ereignis, marblesend_forms_process_queue, wird für etwa eine Minute später geplant und sendet die eingereihten Einsendungen.

Ein Versuch pro Eintrag der Warteschlange

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.

Fehlschläge werden protokolliert

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.

Transient Queue Enqueuing Snippet
// 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.

Shortcode, Block oder Widget

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.

Schutz vor Bots

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.

Gesendet, sobald der Besucher abschickt

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.

Namen, Tags und Bestätigung

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.

Shortcode & Gutenberg Block Embed Syntax

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

Erkennung und Hook

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.

Feld-IDs

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.

Einrichtung

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.

Quell-Tag

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.

WPForms Complete Hook Architecture
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.

Erkennung und Hook

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.

Tag-Namen

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.

Einsendung lesen

Das Plugin liest die gesendeten Daten mit WPCF7_Submission::get_instance()->get_posted_data(), was mit dem AJAX-Versand von CF7 funktioniert.

Einrichtung

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.

Contact Form 7 Mail Sent Hook
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.

Erkennung und Hook

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.

Name Attribute

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.

Formularliste

Die Seite Integrations listet Ihre Formulare, indem sie die eigene Formulartabelle von Fluent Forms liest. Formular-IDs müssen Sie also nicht nachschlagen.

Einrichtung

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.

Fluent Forms Insertion Action
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.

Erkennung und Hook

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.

Field ID

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.

Nur gespeicherte Einträge

Das Plugin läuft, nachdem der Eintrag angelegt wurde. Weitergeleitet werden also nur Einsendungen, die die Validierung von Formidable bestanden haben.

Schritt-für-Schritt-Einrichtung

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.

Formidable Metas Extraction Hook
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.

Erkennung und Hook

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.

Element-ID

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.

Formularliste

Die Seite Integrations listet Ihre Forminator-Formulare mit Namen auf, gelesen mit Forminator_API::get_forms().

Einrichtung

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.

Forminator Submission Pre-Field Hook
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.

Quell-Tags

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.

Willkommens-E-Mail

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.

Kein Automatisierungsdienst dazwischen

Das Plugin sendet Leads direkt an Ihre eigene MarbleSend-Installation. Ein Dienst wie Zapier oder Make ist nicht Teil des Wegs.

Double-Opt-in und Consent Record

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.

Autoresponder Tag Structure (JSON Payload)
{
  "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?

Ursache:

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

Diagnose & Mechanismus:

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

Praktische Anleitung & Behebung:

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“?

Ursache:

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.

Diagnose & Mechanismus:

MarbleSend_Integration_Base::log_skip() schreibt einen Eintrag in marblesend_forms_log, wenn ein aktiviertes Formular keine gültige E-Mail liefert.

Praktische Anleitung & Behebung:

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?

Ursache:

Der Key in WordPress wurde widerrufen, ist abgelaufen, wurde in MarbleSend gelöscht oder ohne den Scope contacts:write erstellt.

Diagnose & Mechanismus:

Test Connection ruft GET /api/verify-key auf. Eine HTTP-Antwort 401 oder 403 bedeutet, dass die Authentifizierung fehlgeschlagen ist.

Praktische Anleitung & Behebung:

Ö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?

Ursache:

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.

Diagnose & Mechanismus:

Senden Sie das Formular selbst ab. Sehen Sie „There was an error trying to send your message“, konnte CF7 seine E-Mail nicht senden.

Praktische Anleitung & Behebung:

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?

Ursache:

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

Diagnose & Mechanismus:

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.

Praktische Anleitung & Behebung:

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.