E-Mail-Workflow-Integrationen und SDKs
Entdecken Sie SendRepute APIs und Integrationen für die E-Mail-Analyse, separat kostenpflichtige KI-Rewrites und Design-Tools. Zentrale Analyse-, Rewrite- und Builder-Endpunkte senden keine E-Mails; explizit aktivierte Campaigns-Zustellungen und bestimmte Provider-Adapter können über Ihren konfigurierten Provider senden. Kein Ergebnis garantiert die Posteingangszustellung.
Das Node.js-Paket ist auf npm verfügbar. Andere Integrationen können hier heruntergeladen oder aus einem verifizierten öffentlichen GitHub-Repository installiert werden. Wählen Sie eine Integration aus, folgen Sie der Anleitung und überprüfen Sie Berechtigungen, aktuelle Preise und Fehlereinstellungen, bevor Sie diese aktivieren.
Behalten Sie Ihren aktuellen E-Mail-Workflow bei. Diese zentralen API-Beispiele analysieren, schreiben oder erstellen lediglich Inhalte; sie versenden niemals E-Mails. Separat dazu können bewusst aktivierte Kampagnen-Zustellungen und bestimmte Provider-Adapter über Ihren konfigurierten Anbieter senden. Wählen Sie ein Tool basierend auf Installation, Konfiguration, Beispielen und Betriebsgrenzen aus. Beispiele werden nicht auf dieser Seite ausgeführt; prüfen Sie kostenpflichtige Vorgänge und Sendeaktionen separat.
WordPress-Plugin
0.2.0
Erfordert WordPress 5.7+, PHP 7.4+ und OpenSSL. Laden Sie die ZIP-Datei über Plugins > Installieren > Plugin hochladen hoch und öffnen Sie dann Einstellungen > SendRepute. Konfigurieren Sie den Token und die Zustimmung zur kostenpflichtigen Analyse für jede Website separat. Nachweise für den installierten Lebenszyklus decken WordPress 6.8.3 mit WooCommerce 10.4.3 ab; separate Nachweise für SMTP-Plugins decken WordPress 7.1.2 mit WP Mail SMTP 4.9.0 und FluentSMTP 2.4.0 ab.
Prüft Nachrichten über pre_wp_mail, ohne SMTP zu ersetzen oder Nachrichten umzuschreiben. Der Hinweismodus erlaubt die Zustellung; der Blockiermodus wendet einen Wahrscheinlichkeitsschwellenwert an. Die API-Fehlerrichtlinie wird separat konfiguriert. Plugins, die wp_mail umgehen, werden nicht abgedeckt; spätere Transportänderungen werden nicht analysiert. Blockieren stellt Nachrichten nicht in eine Warteschlange.
Die Analyse ist standardmäßig deaktiviert. Konfigurieren Sie einen zweckgebundenen Kunden-Token, führen Sie die kostenlose Verbindungsprüfung durch, prüfen Sie die Preise und stimmen Sie explizit zu, bevor Sie die kostenpflichtige Analyse aktivieren. Manuelle KI-Aktionen erfordern eine separate Bestätigung.
WordPress ZIP herunterladen
Öffentliches Quellcode-Repository
Vollständige README und Beispiele
Sicherheitshinweise und bekannte Einschränkungen
1. Installieren
Führen Sie diese Befehle im WordPress-Verzeichnis mit verfügbarem WP-CLI aus, oder laden Sie die heruntergeladene ZIP-Datei über Plugins > Installieren > Plugin hochladen hoch und aktivieren Sie diese. Öffnen Sie Einstellungen > SendRepute. Konfigurieren und aktivieren Sie jede Website bei einer Multisite-Installation separat. Nutzen Sie eine unterstützte WordPress/PHP-Kombination; eine Mindestversion ist keine Empfehlung, Software am Ende ihres Lebenszyklus (End-of-Life) zu betreiben.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-wp.zip
wp plugin install ./sendrepute-wp.zip --activate
Alternative: Installation aus öffentlicher Quelle
Verwenden Sie diesen Quellweg anstelle der oben genannten Download-Anweisungen auf der Website. Die README-Datei des Repositorys erklärt die verbleibenden Aktivierungs- und Konfigurationsschritte; das Erstellen einer ZIP-Datei allein installiert kein Plugin. Für Python fügt der zweite Befehl optionale Django-Unterstützung hinzu. Bewahren Sie Zugangsdaten in Server-Secrets auf und lesen Sie die Sicherheitshinweise, bevor Sie kostenpflichtige Funktionen aktivieren. Nur Node ist auf npm; ein öffentliches GitHub-Repository impliziert keine Veröffentlichung auf WordPress.org, n8n Cloud, Packagist oder PyPI.
git clone https://github.com/sendrepute/sendrepute-wordpress.git
cd sendrepute-wordpress
python3 package.py
2. Sicher konfigurieren
Erstellen Sie einen serverseitigen Kunden-Token mit den Berechtigungen classify, account:read und catalog:read sowie Ablaufdatum und Ausgabenlimit. Geben Sie diesen in den Einstellungen ein oder laden Sie SENDREPUTE_API_TOKEN aus Ihrem Server-Geheimnis-Speicher wie gezeigt. Gespeicherte Token verwenden authentifizierte Verschlüsselung mit WordPress-Salts und OpenSSL; geben Sie diese nach einer Salt-Rotation erneut ein. Führen Sie die kostenlose Verbindungsprüfung durch, prüfen Sie die Klassifizierungspreise und aktivieren Sie dann explizit die automatische Analyse. Legen Sie den Advisory/Blocking-Modus, den Schwellenwert und die unabhängige Fail-Open/Fail-Closed-Richtlinie fest.
// wp-config.php — optional server-secret alternative to settings storage.
$sendreputeToken = getenv('SENDREPUTE_API_TOKEN');
if (is_string($sendreputeToken) && $sendreputeToken !== '') {
define('SENDREPUTE_API_TOKEN', $sendreputeToken);
}
3. Bewusst nutzen
Die unten stehende Funktion verwendet das normale wp_mail und sendet nur, wenn Ihre Anwendung dies aufruft. Wenn die kostenpflichtige Analyse aktiviert ist, analysiert das Plugin bei pre_wp_mail und erlaubt oder blockiert dann den vorhandenen Transport. Geben Sie Ihren eigenen autorisierten Empfänger an; testen Sie zuerst gegen einen nicht-weiterleitenden lokalen Mail-Sink. Ein negatives Ergebnis bedeutet, dass der Aufrufer den abgelehnten Versand verarbeiten muss – er wird nicht in eine Warteschlange gestellt.
// Call deliberately: this sends through your existing WordPress transport.
function sendrepute_reviewed_message($recipient) {
return wp_mail(
$recipient,
'Your requested account summary',
'Here is the account summary you requested.'
);
}
Was kann es sonst noch?
Die Einstellungen bieten auch manuelle KI-Umschreibungs- und Vorlagenerstellungs-Aktionen mit separater zahlungspflichtiger Bestätigung an. Die Preisanzeige benötigt vip:read; Umschreiben benötigt rewrite; die Erstellung benötigt ai:generate, und die VIP-Erstellung erfordert eine aktive VIP-Mitgliedschaft. Ergebnisse sind maskierte Texte nur zum Kopieren: Sie werden niemals automatisch angewendet oder versendet. Bestehende Token erhalten nicht automatisch neue Berechtigungen.
Ergebnisse, Fehler und Grenzen
Advisory erlaubt die Zustellung; Blocking vergleicht die endliche spamProbability mit Ihrem Schwellenwert. API-Timeouts und Fehler folgen der separaten Fehlerrichtlinie, nicht einem Spam-Label. Opake lokale Sperren unterdrücken wiederholte Analysen für 24 Stunden; unbekannte Netzwerkergebnisse werden nicht automatisch wiederholt. Die eigentlichen Sendevorgänge werden nicht dedupliziert. Installierte Update-Prüfungen deckten ein getracktes 0.1.0 ZIP-Upgrade auf 0.2.0, Administrator-Nonce-Ablehnung/-Speicherung und den gewählten WooCommerce-Pfad ab. Eine separate Matrix mit 40 Szenarien deckte beide Plugin-Lade-Reihenfolgen mit WP Mail SMTP und FluentSMTP ab, einschließlich To/Cc/Bcc, Reply-To, Headern, Anhängen, SMTP-Ablehnung und Policy-Ergebnissen. Diese exakten Tupel zertifizieren keine anderen CMS-, SMTP-Plugin- oder Provider-Versionen. Hooks, die wp_mail umgehen, sowie spätere Transport-Änderungen bleiben außerhalb der Abdeckung. Die Deaktivierung bewahrt die Einstellungen; die Deinstallation entfernt die Anmeldedaten, selbst wenn deaktivierte Einstellungen beibehalten werden. Entfernen Sie einen wp-config-Token selbst.
WooCommerce E-Mail-Adapter
0.2.0
In derselben SendRepute 0.2.0 ZIP wie das WordPress-Plugin enthalten; es gibt kein separates WooCommerce-Add-on oder einen separaten Download. Erfordert die WordPress 5.7+, PHP 7.4+ und OpenSSL-Basis des Plugins. Der Adapter wurde mittels Quellcode-Überprüfung gegen WooCommerce 10.4.3 geprüft, nicht zertifiziert über jede WooCommerce- oder Mail-Erweiterungs-Version.
Die WooCommerce-Analyse verfügt über einen eigenen Administrator-Schalter und exakte integrierte E-Mail-Typ-Auswahlen, die standardmäßig alle deaktiviert sind. Die globale Analyse und die Steuerungen für die Zustimmung zur kostenpflichtigen Analyse müssen ebenfalls aktiviert sein. Nicht ausgewählte und durch Erweiterungen definierte Typen umgehen die Analyse. Jeder ausgewählte integrierte customer_*-Typ ist geschützt und dient nur als Hinweis (advisory-only): Er kann analysiert, aber niemals blockiert werden. Ausgewählte Multipart-Mails schlagen bei der Klassifizierung vor jeder kostenpflichtigen Anfrage fehl; Hinweis oder Fail-Open bewahrt die Zustellung, während Fail-Closed nur nicht geschützte Mails blockiert.
Gemeinsame WordPress- und WooCommerce-ZIP herunterladen
Öffentliches Quellcode-Repository
Vollständige README und Beispiele
Sicherheitshinweise und bekannte Einschränkungen
1. Installieren
Dies ist dieselbe installierbare ZIP-Datei, die auch im WordPress-Leitfaden verwendet wird. Installieren Sie sie nur einmal; installieren Sie kein zweites WooCommerce-Add-on. Aktivieren Sie SendRepute und öffnen Sie dann Einstellungen > SendRepute. Halten Sie WordPress, WooCommerce, PHP und den tatsächlichen E-Mail-Transport unterstützt und aktuell.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-wp.zip
wp plugin install ./sendrepute-wp.zip --activate
Alternative: Installation aus öffentlicher Quelle
Verwenden Sie diesen Quellweg anstelle der oben genannten Download-Anweisungen auf der Website. Die README-Datei des Repositorys erklärt die verbleibenden Aktivierungs- und Konfigurationsschritte; das Erstellen einer ZIP-Datei allein installiert kein Plugin. Für Python fügt der zweite Befehl optionale Django-Unterstützung hinzu. Bewahren Sie Zugangsdaten in Server-Secrets auf und lesen Sie die Sicherheitshinweise, bevor Sie kostenpflichtige Funktionen aktivieren. Nur Node ist auf npm; ein öffentliches GitHub-Repository impliziert keine Veröffentlichung auf WordPress.org, n8n Cloud, Packagist oder PyPI.
git clone https://github.com/sendrepute/sendrepute-wordpress.git
cd sendrepute-wordpress
python3 package.py
2. Sicher konfigurieren
Verwenden Sie ein bereichsbeschränktes Kunden-Token aus den Server-Secrets oder der verschlüsselten WordPress-Einstellung. Konfigurieren Sie zuerst die gemeinsame, nicht kostenpflichtige Verbindungsprüfung, die Prüfung der aktuellen Preise, die globale Einwilligung für bezahlte Analysen, den Risikomodus, den Schwellenwert und die Fehlerrichtlinie. Aktivieren Sie dann separat die WooCommerce-Analyse und wählen Sie nur die integrierten E-Mail-Typen aus, die Sie überprüft haben. Von Erweiterungen definierte Typen werden niemals automatisch ausgewählt.
// wp-config.php — keep the shared WordPress/WooCommerce token server-side.
$sendreputeToken = getenv('SENDREPUTE_API_TOKEN');
if (is_string($sendreputeToken) && $sendreputeToken !== '') {
define('SENDREPUTE_API_TOKEN', $sendreputeToken);
}
3. Bewusst nutzen
Senden Sie weiterhin normal über WooCommerce. Der Adapter umschließt den bereits von WooCommerce gewählten Callback und bewahrt dessen ursprüngliche Argumente und den Transport; er stellt keine neue send-Methode bereit. Wenn ein anderer Filter Callback-Argumente verändert, gewöhnliche Mails während dieses Callbacks verschachtelt werden oder ein benutzerdefinierter Callback niemals wp_mail aufruft, wird die Analyse konservativ umgangen, anstatt in den allgemeinen kostenpflichtigen Pfad zu fallen. Testen Sie ausgewählte nicht-kritische Typen mit einem nicht-weiterleitenden Mail-Sink.
Ergebnisse, Fehler und Grenzen
Ausgewählte einteilige E-Mails folgen den gemeinsamen WordPress-Hinweisen, Schwellenwerten und Fehlerrichtlinien, mit der Ausnahme, dass jeder customer_*-Typ geschützt und rein beratend ist. Geschützte Kunden-E-Mails werden nach einem Hochrisiko-Ergebnis, einem API-Fehler oder nicht unterstütztem Inhalt immer weitergeleitet. WooCommerce erstellt Multipart-Alternativen nach pre_wp_mail, sodass ausgewählte Multipart-E-Mails vor einer kostenpflichtigen Anfrage fehlschlagen, anstatt teilweise klassifiziert zu werden; nur ausgewählte, nicht geschützte E-Mails können durch fail-closed abgelehnt werden. Der Callback-Kontext wird nach Erfolg, Fehler und verschachtelten Sendevorgängen entfernt.
Drupal Mail-Backend
0.1.0
Erfordert Drupal 10.3+ oder 11.x und PHP 8.1+. Installieren Sie die ZIP-Datei als Modul, gewähren Sie administer sendrepute nur vertrauenswürdigen Administratoren, konfigurieren Sie einen begrenzten Anzeigenamen des Absenders ohne Adresse und wählen Sie exakte Modul-/Key-Mail-Routen aus. Version 0.1.0 unterstützt nur Drupal Core php_mail; es handelt sich um ein Mail-Backend, nicht um einen Provider oder einen Ersatz-Transport. Nachweise von installierten Websites decken exakte Drupal 10.6.17 und 11.4.7 Releases mit PHP 8.4.10 ab.
Die Zustimmung zur kostenpflichtigen Analyse und jede Route sind standardmäßig deaktiviert. Jede exakte Route verwendet den festen Core php_mail-Delegaten, den Hinweis- oder Blockiermodus, eine unabhängige preserve- oder block-Fehlerrichtlinie, einen Schwellenwert und eine bewusste Auswahl kritischer Mails. Account- und Sicherheits-Mails bleiben zustellbar, sofern diese exakte Route nicht explizit kritisches Blockieren erlaubt. Dieselbe php_mail-Instanz führt format() aus und sendet einen skalaren finalen Body; Multipart- und anhangsbasierte Ausgaben werden nicht unterstützt.
Drupal-ZIP herunterladen
Öffentliches Quellcode-Repository
Vollständige README und Beispiele
Sicherheitshinweise und bekannte Einschränkungen
1. Installieren
Führen Sie den Befehl im Drupal-Projektstammverzeichnis aus oder laden Sie die ZIP-Datei mit dem Modul-Installer von Drupal hoch. Das Archiv enthält ein sendrepute-Modulverzeichnis, das für modules/contrib geeignet ist. Aktivieren Sie es, gewähren Sie die Berechtigung „administer sendrepute“ nur vertrauenswürdigen Administratoren und öffnen Sie Konfiguration > System > SendRepute.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-drupal.zip
unzip sendrepute-drupal.zip -d modules/contrib
drush en sendrepute -y
Alternative: Installation aus öffentlicher Quelle
Verwenden Sie diesen Quellweg anstelle der oben genannten Download-Anweisungen auf der Website. Die README-Datei des Repositorys erklärt die verbleibenden Aktivierungs- und Konfigurationsschritte; das Erstellen einer ZIP-Datei allein installiert kein Plugin. Für Python fügt der zweite Befehl optionale Django-Unterstützung hinzu. Bewahren Sie Zugangsdaten in Server-Secrets auf und lesen Sie die Sicherheitshinweise, bevor Sie kostenpflichtige Funktionen aktivieren. Nur Node ist auf npm; ein öffentliches GitHub-Repository impliziert keine Veröffentlichung auf WordPress.org, n8n Cloud, Packagist oder PyPI.
git clone https://github.com/sendrepute/sendrepute-drupal.git
cd sendrepute-drupal
2. Sicher konfigurieren
Speichern Sie einen für Klassifizierung beschränkten SENDREPUTE_API_TOKEN nur in der Web-/PHP-Prozessumgebung. Er wird niemals über das Formular akzeptiert oder in der Drupal-Konfiguration exportiert. Geben Sie im Formular einen erforderlichen Absender-Anzeigenamen von maximal 320 Bytes ohne Adresse, spitze Klammern oder Steuerzeichen ein. Fügen Sie pro exakter Route eine Zeile mit sieben Feldern wie gezeigt hinzu; der Delegat muss php_mail sein. Wählen Sie den advisory/block-Modus, die preserve/block-Fehlerrichtlinie, den Schwellenwert und kritisch ja/nein. Beginnen Sie mit advisory, preserve und nein.
export SENDREPUTE_API_TOKEN="replace-with-a-scoped-server-token"
# Enter a non-address sender display name in Configuration > System > SendRepute.
# One exact route in Configuration > System > SendRepute:
# contact|page_mail|php_mail|advisory|preserve|0.90|no
3. Bewusst nutzen
Rufen Sie weiterhin den normalen Mail-Manager von Drupal auf. Für eine aktivierte Route ruft sendrepute_mail die Funktion format() des Core-php_mail auf, analysiert diesen finalen skalaren Body, wendet die Richtlinie an und ruft dann mail() derselben zwischengespeicherten php_mail-Instanz auf. Andere Delegaten-IDs werden abgelehnt. Es verwendet kein hook_mail_alter und schreibt die Nachricht nicht um.
Ergebnisse, Fehler und Grenzen
Ein validierter Erfolg blockiert im Block-Modus nur bei oder über dem konfigurierten Schwellenwert. Das vollständige verschachtelte Klassifizierungsergebnis und die Abrechnungsantwort werden validiert, bevor die spamProbability die Zustellung beeinflussen kann. Fehler bei API, Authentifizierung, Balance, Rate-Limit, Formatierung, Multipart, Anhang-Indikatoren und Größe folgen der unabhängigen Routen-Fehlerrichtlinie, außer geschützte kritische E-Mails, die fortgesetzt werden. Die installierte 10.6.17/11.4.7 Matrix deckte die Installation und den in-place ZIP-Austausch im aktivierten Zustand, echten Administrator-Login, Form API CSRF-Ablehnung/-Speicherung, Plugin-Discovery, Routen-Opt-in, synthetische Klassifizierung, die Erhaltung kritischer E-Mails und Core-php_mail über eine lokale Senke ab. Baseline-Quellprüfungen decken auch unveränderliche 10.3.0 und 11.0.0 Archive ab; kein Ergebnis zertifiziert jeden späteren Patch oder beigesteuerte Mailer. Der konfigurierte Anzeigename, ein nicht-leerer Betreff und der durch die Länge begrenzte Body werden gesendet; Adressen, Empfänger, Header, Parameter und Anhänge sind ausgeschlossen. Der Betreff ist auf 998 Bytes und der Body auf 256 KiB begrenzt. Es gibt einen verifizierten HTTPS-Versuch, keine Redirects, Wiederholungen oder Warteschlangen.
PrestaShop E-Mail-Modul
0.1.1
Version 0.1.1 unterstützt exakt PrestaShop 9.0.0, 9.0.1, 9.0.2 und 9.0.3 mit PHP 8.1–8.4. Laden Sie die ZIP-Datei unter Module > Module Manager hoch und konfigurieren Sie dann die SendRepute Mail-Klassifizierung. Alle vier offiziellen vorkonfigurierten Classic-Releases haben die isolierte Installation, die authentifizierte Administratorkonfiguration und ZIP-Update-Prüfungen bestanden; ihre unveränderten Mail::send() Implementierungen haben zudem die Offline-Real-Mail-Matrix bestanden. PrestaShop 8, 9.1+ und spätere nicht aufgeführte 9.0 Patches werden nicht unterstützt.
Das Modul, die Zustimmung zu Kosten/Inhalten und die genaue Template-Auswahl sind standardmäßig deaktiviert. Es analysiert den final gerenderten Betreff und jeden unterstützten angezeigten Body, ohne die Symfony-Nachricht neu zu erstellen. Eine Nachricht, die sowohl text/plain als auch text/html enthält, wird in einem gebündelten Klassifizierungs-Request gesendet: Die Plain-Alternative wird inaktiv gemacht, das ursprüngliche HTML bleibt erhalten, und der Dienst analysiert jede getypte Alternative unabhängig ohne Konkatenation. Das Ergebnis nutzt das höchste Risiko mit den vollständigen Inhaltsprüfungen, erzeugt eine kostenpflichtige Klassifizierung und gibt niemals einen partiellen Sicherheits-Score zurück. Ein Hinweis unterbricht den Versand niemals. Threshold-Blocking und Fail-Closed werfen eine Exception, die sowohl die ExceptionInterface von Symfony Mailer als auch die ModuleErrorInterface von PrestaShop implementiert; in jedem unterstützten Release beobachtete der installierte Test, dass Mail::send() false zurückgibt, ohne dass eine SMTP-Zustellung erfolgt. Die Fehlerrichtlinie ist unabhängig vom Risiko-Schwellenwert.
PrestaShop-ZIP herunterladen
Öffentliches Quellcode-Repository
Vollständige README und Beispiele
Sicherheitshinweise und bekannte Einschränkungen
1. Installieren
Laden Sie die 0.1.1 ZIP-Datei herunter, verwenden Sie dann Module > Module Manager > Modul hochladen und wählen Sie diese aus. Öffnen Sie Configure für die SendRepute E-Mail-Klassifizierung. Erzwingen Sie keine Installation außerhalb von exakt PrestaShop 9.0.0–9.0.3: Das Abbruch- und Signaturverhalten hängt von den geprüften Mail::send() Pfaden ab.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-prestashop.zip
Alternative: Installation aus öffentlicher Quelle
Verwenden Sie diesen Quellweg anstelle der oben genannten Download-Anweisungen auf der Website. Die README-Datei des Repositorys erklärt die verbleibenden Aktivierungs- und Konfigurationsschritte; das Erstellen einer ZIP-Datei allein installiert kein Plugin. Für Python fügt der zweite Befehl optionale Django-Unterstützung hinzu. Bewahren Sie Zugangsdaten in Server-Secrets auf und lesen Sie die Sicherheitshinweise, bevor Sie kostenpflichtige Funktionen aktivieren. Nur Node ist auf npm; ein öffentliches GitHub-Repository impliziert keine Veröffentlichung auf WordPress.org, n8n Cloud, Packagist oder PyPI.
git clone https://github.com/sendrepute/sendrepute-prestashop.git
cd sendrepute-prestashop
2. Sicher konfigurieren
Setzen Sie SENDREPUTE_API_BASE auf den für dieses Modul bereitgestellten kanonischen HTTPS-Origin von SendRepute und SENDREPUTE_API_TOKEN auf ein Scoped-Server-Token in der PHP-FPM/Server-Umgebung. Die Basis muss ein pfadfreier, öffentlicher DNS-HTTPS-Origin sein; Literale, Anmeldedaten, Weiterleitungen und private DNS-Antworten werden abgelehnt. Führen Sie die nicht kostenpflichtige Konto-/Preis-Verbindungsprüfung durch, und aktivieren Sie dann explizit das Modul, die Einwilligung für bezahlte Inhalte und die genauen Vorlagennamen. Wählen Sie Advisory/Block, Schwellenwert und offene/geschlossene Fehlerrichtlinie unabhängig voneinander aus.
export SENDREPUTE_API_BASE="replace-with-the-canonical-sendrepute-https-origin"
export SENDREPUTE_API_TOKEN="replace-with-a-scoped-server-token"
3. Bewusst nutzen
Nutzen Sie weiterhin den normalen Mail::send Flow von PrestaShop. Der frühe Hook merkt sich nur ein ausgewähltes, exaktes Template. Der finale Hook liest den bereits gerenderten Symfony Email Betreff, Text-Body und HTML-Body, ohne Empfänger, Header, Anhänge oder den Transport zu ändern. Bei dualen Body-Inhalten werden inerter Plaintext und das Original-HTML als typisierte Alternativen in einem Request übermittelt; eine unabhängige Service-Normalisierung verhindert, dass ein Fragment ein anderes konsumiert, während sichtbare HTML-Link- und Bildziele für den Audit erhalten bleiben. Ein einzelner Plain-Body verbleibt auf dem engen Pfad für inerten Text, und ein einzelner HTML-Body verbleibt auf dem engen Pfad der DOM-Extraktion. Die Klassifizierung wird abgeschlossen, bevor PrestaShop eine separate DKIM-signierte Nachricht erstellt. Die Matrix der unterstützten Versionen verifizierte die ausgegebene Multipart-Struktur sowie den DKIM Body-Hash und die RSA-Signatur nach der Klassifizierung. Der fixierte Signaturpfad von PrestaShop lässt Bcc in den vorbereiteten signierten Headern weg und verliert diesen blinden SMTP-Empfänger; ein gültiger Signaturnachweis belegt daher keine Bcc-Zustellungskompatibilität. Kombinieren Sie DKIM und Bcc nicht auf diesem unterstützten Pfad. Nicht unterstützte Anzeige-Quellen, aktive Semantik, mehrdeutiges quoted-printable oder base64 HTML sowie übergroßer Gesamtinhalt folgen vor der Zahlung der konfigurierten Fehlerrichtlinie. Lassen Sie kritische Templates unausgewählt, sofern sie nicht bewusst genehmigt wurden.
Ergebnisse, Fehler und Grenzen
Der Klassifizierer akzeptiert einen text/plain Body, einen text/html Body oder beide als unabhängig analysierte alternative Darstellungen. Literaler Text, Entitäten, versteckte Inhalte sowie Style-Elemente in einer akzeptierten Alternative können eine spätere Alternative weder verbrauchen noch verbergen; mehrdeutige quoted-printable oder base64 HTML-Inhalte werden vor der Bezahlung abgelehnt. Jede akzeptierte Alternative kann das Ergebnis mit dem höchsten Risiko bestimmen, während content audits jede Alternative abdecken; die Klassifizierung wird nur einmal berechnet, nachdem die vollständige begrenzte Eingabe akzeptiert wurde. Der erforderliche Legacy-Body dupliziert exakt die inerte Plain-Alternative für eine duale Nachricht, und dieses Duplikat sowie beide getypten Alternativen teilen sich das exakte 524288-byte Request-Budget. Empfänger, Anhänge und eingebettete Ressourcen sind ausgeschlossen, und die ursprüngliche Nachricht des Transports vor der Signierung bleibt erhalten. Das real-mail Fixture prüft separat die MIME/Signatur-Integrität und die tatsächlichen SMTP-Empfänger: DKIM-Signaturen bleiben nach der Klassifizierung gültig, aber der geprüfte vorgelagerte signierte Pfad bewahrt keine Bcc-Empfänger. Eine validierte Klassifizierung speichert eine begrenzte aktuelle beratende Zusammenfassung. Der Block-Modus löst nur bei oder oberhalb des Schwellenwerts aus; die Dual-Interface-Exception übersteht den Hook-Versand und erzeugt false vor dem Transport auf allen vier installierten Releases. Nicht unterstützte Inhalte, API- und Validierungsfehler folgen unabhängig offen/geschlossen. Ein HTTPS-Versuch nutzt Pinned Public DNS, verifiziertes TLS, endliche Timeouts, eine 256 KiB Response-Obergrenze, keine Weiterleitungen und keine Retries. Das Blockieren stützt sich auf den geprüften Exception-Catch von PrestaShop Mail::send(), nicht auf den finalen Hook-Rückgabewert.
Symfony Mailer Adapter
0.1.1
Erfordert PHP 8.1+ und ist ausschließlich für Symfony Mailer 6.4 oder 7.4 vorgesehen; die exakt verifizierten Releases sind 6.4.46 und 7.4.19. Es wird keine Kompatibilität für Symfony 8.1 oder nicht getestete Lines beansprucht. Installieren Sie die lokale Quell-ZIP über ein Composer path repository; dieses Paket ist nicht auf Packagist veröffentlicht.
Das Bundle und die Zustimmung zur kostenpflichtigen Analyse sind standardmäßig deaktiviert, und nur eine Nachricht mit dem exakt konfigurierten Opt-in-Header ist berechtigt. Richtlinien für Hinweis- oder Blockier-Scores sind unabhängig von der allow oder block Fehlerrichtlinie. Die Klassifizierung erfolgt über das offizielle Pre-Send MessageEvent; Ablehnungen verwenden MessageEvent::reject(). Gereihte Clone-Events werden übersprungen, sodass das Worker-Transport-Event der einzige kostenpflichtige Klassifizierungspunkt ist.
Symfony Quell-ZIP herunterladen
Öffentliches Quellcode-Repository
Vollständige README und Beispiele
Sicherheitshinweise und bekannte Einschränkungen
1. Installieren
Extrahiere die heruntergeladene ZIP in ein dauerhaftes packages-Verzeichnis, registriere dieses Verzeichnis als Composer-Pfad-Repository, fordere das exakte 0.1.1-Paket an und registriere das SendRepute\Symfony\SendReputeBundle, falls Flex dies nicht tut. Das Quellarchiv ist lokal und unveröffentlicht.
mkdir -p packages
curl -fL https://www.sendrepute.com/downloads/sendrepute-symfony.zip -o packages/sendrepute-symfony.zip
unzip packages/sendrepute-symfony.zip -d packages
composer config repositories.sendrepute path ./packages/sendrepute-symfony
composer require sendrepute/symfony:0.1.1
Alternative: Installation aus öffentlicher Quelle
Verwenden Sie diesen Quellweg anstelle der oben genannten Download-Anweisungen auf der Website. Die README-Datei des Repositorys erklärt die verbleibenden Aktivierungs- und Konfigurationsschritte; das Erstellen einer ZIP-Datei allein installiert kein Plugin. Für Python fügt der zweite Befehl optionale Django-Unterstützung hinzu. Bewahren Sie Zugangsdaten in Server-Secrets auf und lesen Sie die Sicherheitshinweise, bevor Sie kostenpflichtige Funktionen aktivieren. Nur Node ist auf npm; ein öffentliches GitHub-Repository impliziert keine Veröffentlichung auf WordPress.org, n8n Cloud, Packagist oder PyPI.
git clone https://github.com/sendrepute/sendrepute-symfony.git
cd sendrepute-symfony
2. Sicher konfigurieren
Löse SENDREPUTE_API_TOKEN aus den Server-Secrets auf. Halte enabled und paid_analysis_consent auf false, während die aktuellen Preise überprüft werden. Modus, Schwellenwert und Fehlerrichtlinie sind unabhängig. Der Endpunkt ist auf verifiziertes HTTPS mit begrenzten Deadlines, ohne Redirects oder Retries und einem 1 MiB Response-Limit festgelegt.
send_repute:
enabled: false
paid_analysis_consent: false
api_token: '%env(SENDREPUTE_API_TOKEN)%'
mode: advisory
failure_policy: allow
spam_probability_threshold: 0.8
3. Bewusst nutzen
Fügen Sie den exakten Opt-in-Header nur überprüften, unkritischen Email-Objekten hinzu und fahren Sie dann über den normalen Mailer fort. Die Nachricht, der Umschlag, der Transport und der Header werden nicht umgeschrieben. Konfigurieren Sie für die Zustellung per Messenger das Bundle in den Workern: Producer-Clone-Events werden absichtlich nicht klassifiziert.
$email->getHeaders()->addTextHeader('X-SendRepute-Classify', 'yes');
$mailer->send($email);
Ergebnisse, Fehler und Grenzen
Es wird genau ein in-memory text/plain oder text/html Body unterstützt. Gemischte Alternativen, textuelle DataParts, Streams oder Pfade, CSS-Klammern, Markup, quoted-printable Syntax, base64 Header oder Ganzkörper-base64 schlagen vor der Zahlung fehl und folgen der Fehlerrichtlinie; gewöhnlicher klammerfreier Inhalt bleibt unverändert. Jedes erforderliche verschachtelte Antwortfeld und jeder optionale Audit-Zweig wird validiert und unbekannte Eigenschaften werden abgelehnt. Advisory blockiert niemals über den Score; Blockierung weist beim Schwellenwert über das reale Transport-Event ab.
Rails Action Mailer Adapter
0.1.0
Erfordert Ruby 3.2+ und wurde explizit mit Action Mailer 7.1.6 und Mail 2.9.1 verifiziert; der Callback-Pfad wurde auch unter Action Mailer 7.2.3.2 beobachtet. Dies ist keine Zertifizierung für jedes zulässige Rails 7.x-Release. Installieren Sie die lokale Quell-ZIP über Bundler; es wird keine RubyGems-Veröffentlichung beansprucht.
Beide globalen kostenpflichtigen Schranken sind standardmäßig deaktiviert, und jede Mailer-Aktion muss sendrepute_paid_preflight! explizit aufrufen. Das Hinweis-/Blockier-Score-Verhalten und das preserve/block Fehlerverhalten sind unabhängig voneinander. Routen für Passwort-Resets, MFA, Login, Verifizierung, Abrechnung und Sicherheit sollten nicht ausgewählt werden. Jede mehrteilige Nachricht sowie mehrdeutige CSS-, quoted-printable oder nach base64 aussehende Inhalte werden vor der Zahlung abgelehnt; ein akzeptierter dekodierter Text- oder HTML-Body wird analysiert, ohne die ursprüngliche Nachricht oder den Transport zu verändern.
Rails-Quellcode-ZIP herunterladen
Öffentliches Quellcode-Repository
Vollständige README und Beispiele
Sicherheitshinweise und bekannte Einschränkungen
1. Installieren
Entpacken Sie die ZIP-Datei exakt nach vendor/sendrepute-rails, fügen Sie den lokalen Pfadeintrag zum Gemfile hinzu, führen Sie Bundler in Ihrer kontrollierten Umgebung aus und binden Sie SendRepute::Rails::Mailer in ApplicationMailer ein. Dies ist keine RubyGems-Installation.
# Download sendrepute-rails.zip, then extract it into vendor/sendrepute-rails.
gem "sendrepute-rails", path: "vendor/sendrepute-rails"
Alternative: Installation aus öffentlicher Quelle
Verwenden Sie diesen Quellweg anstelle der oben genannten Download-Anweisungen auf der Website. Die README-Datei des Repositorys erklärt die verbleibenden Aktivierungs- und Konfigurationsschritte; das Erstellen einer ZIP-Datei allein installiert kein Plugin. Für Python fügt der zweite Befehl optionale Django-Unterstützung hinzu. Bewahren Sie Zugangsdaten in Server-Secrets auf und lesen Sie die Sicherheitshinweise, bevor Sie kostenpflichtige Funktionen aktivieren. Nur Node ist auf npm; ein öffentliches GitHub-Repository impliziert keine Veröffentlichung auf WordPress.org, n8n Cloud, Packagist oder PyPI.
git clone https://github.com/sendrepute/sendrepute-rails.git
cd sendrepute-rails
2. Sicher konfigurieren
Lassen Sie enabled und paid_consent auf false, bis die aktuellen Preise und Routen überprüft wurden. Lesen Sie den SENDREPUTE_API_TOKEN aus den Rails credentials oder einem anderen Server-Geheimnis. Konfigurieren Sie Advisory/Block, Preserve/Block und Schwellenwerte unabhängig voneinander; on_result und on_error Callbacks dürfen keine Nachrichteninhalte, Autorisierungsdaten oder vollständige Antworten protokollieren.
SendRepute::Rails.configure do |config|
config.enabled = false
config.paid_consent = false
config.token = Rails.application.credentials.dig(:sendrepute, :api_token)
config.mode = :advisory
config.failure_policy = :preserve
config.score_threshold = 0.8
end
3. Bewusst nutzen
Rufen Sie sendrepute_paid_preflight! nur innerhalb jeder gezielt ausgewählten, unkritischen Mailer-Action auf. Normale Actions umgehen die Klassifizierung. Der paid-Hook verwendet die before_deliver-Route von Action Mailer; es wird kein globales automatisches Opt-in bereitgestellt und der Adapter schreibt die Mail::Message nicht um.
class ApplicationMailer < ActionMailer::Base
include SendRepute::Rails::Mailer
end
def newsletter
sendrepute_paid_preflight!
mail(to: params[:to], subject: "News")
end
Ergebnisse, Fehler und Grenzen
Ein decodierter text/plain oder text/html angezeigter Body wird unterstützt. Jede mehrteilige oder mehrdeutige Normalisierungseingabe schlägt vor der Zahlung fehl und folgt der Fehlerrichtlinie. Eine vollständige typisierte verschachtelte Antwort kann nur im Block-Modus bei oder über dem Schwellenwert blockieren; advisory bewahrt jeden Score. Result- und Error-Callbacks erhalten unveränderliche sichere Daten, und Callback-Ausnahmen oder throw(:abort) werden lokal abgefangen, sodass sie advisory nicht beenden oder die Zustellung verhindern können. Der feste Endpunkt verweigert Weiterleitungen und Retries und verwendet eine begrenzte Gesamtfrist. Echte Action Mailer 7.1.6 Tests bestanden: 19 Durchläufe und 59 Assertions; es erfolgte keine kostenpflichtige Anfrage oder reale Zustellung.
Spring JavaMailSender-Adapter
0.1.1
Erfordert Java 17+ und zielt auf Spring Framework 6.2.x JavaMailSender ab; die exakte Abhängigkeitsprüfung verwendete Spring Framework 6.2.19. Es gibt keinen Anspruch auf Spring Boot 4 oder eine breite Framework-Versionsunterstützung. Erstellen Sie das lokale Quellcode-ZIP mit Maven; es ist nicht bei Maven Central oder einer anderen Registry veröffentlicht.
Der Decorator, paidConsent, Advisory-Modus und die Standardeinstellungen für allow-on-failure sind explizit. Nur sendWithSendRepute(...) führt eine kostenpflichtige Analyse vor dem Senden durch; jede gewöhnliche send(...)-Überladung umgeht die Klassifizierung und delegiert unverändert. Verwenden Sie gewöhnliches send für kritische E-Mails, es sei denn, dieser individuelle Sendevorgang wird bewusst ausgewählt. Unterstützte angezeigte MIME-Alternativen werden inert zusammengefasst; nicht unterstützte, verschachtelte, signierte, verschlüsselte oder mehrdeutige Inhalte schlagen vor der Zahlung fehl.
Spring Java-Quellcode-ZIP herunterladen
Öffentliches Quellcode-Repository
Vollständige README und Beispiele
Sicherheitshinweise und bekannte Einschränkungen
1. Installieren
Entpacken Sie das 0.1.1 Quell-ZIP, führen Sie mvn verify aus und installieren Sie es ausschließlich in Ihr kontrolliertes lokales Maven-Repository. Die konsumierende Anwendung stellt ihren vorhandenen JavaMailSender und die Runtime-Mail-Implementierung bereit. Die exakte Abhängigkeitsprüfung verwendete Java 17 Bytecode, Spring Framework 6.2.19 und die im enthaltenen README dokumentierten Versionen.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-spring-mail.zip
unzip sendrepute-spring-mail.zip
cd sendrepute-spring-mail-0.1.1
mvn verify
mvn install
Alternative: Installation aus öffentlicher Quelle
Verwenden Sie diesen Quellweg anstelle der oben genannten Download-Anweisungen auf der Website. Die README-Datei des Repositorys erklärt die verbleibenden Aktivierungs- und Konfigurationsschritte; das Erstellen einer ZIP-Datei allein installiert kein Plugin. Für Python fügt der zweite Befehl optionale Django-Unterstützung hinzu. Bewahren Sie Zugangsdaten in Server-Secrets auf und lesen Sie die Sicherheitshinweise, bevor Sie kostenpflichtige Funktionen aktivieren. Nur Node ist auf npm; ein öffentliches GitHub-Repository impliziert keine Veröffentlichung auf WordPress.org, n8n Cloud, Packagist oder PyPI.
git clone https://github.com/sendrepute/sendrepute-java.git
cd sendrepute-java
2. Sicher konfigurieren
Erstellen Sie die SendReputeConfiguration aus einem serverseitigen Token und expliziten Schaltern. Lassen Sie enabled und paidAnalysisConsent auf false, bis die Preise und ausgewählten Aufrufe überprüft wurden. Advisory/blocking, threshold und die Allow/Block-Fehlerrichtlinie sind unabhängig voneinander. Der Endpunkt ist auf verifiziertes HTTPS ohne Redirect oder Retry festgelegt.
var settings = new SendReputeConfiguration(
token, false, false,
SendReputeConfiguration.Mode.ADVISORY,
SendReputeConfiguration.FailurePolicy.ALLOW,
0.80, Duration.ofSeconds(3), Duration.ofSeconds(10));
var reviewedSender = new SendReputeJavaMailSender(existingSender, settings);
3. Bewusst nutzen
Rufen Sie sendWithSendRepute(...) nur für eine einzelne SimpleMailMessage, MimeMessage oder MimeMessagePreparator auf, die eine Analyse durchlaufen soll. Überladungen für Einzel- und varargs werden unterstützt. Jede normale send(...) Überladung umgeht die Klassifizierung. Preparators rendern einmal und das ursprüngliche vorbereitete MIME wird delegiert, nachdem die Richtlinie es zulässt.
// Paid classification is possible only on this explicit method.
reviewedSender.sendWithSendRepute(reviewedMessage);
// Every ordinary JavaMailSender send overload bypasses classification.
reviewedSender.send(criticalMessage);
Ergebnisse, Fehler und Grenzen
Alle unterstützten angezeigten Plain- und HTML-Teile werden analysiert; Empfänger und Anhänge sind ausgeschlossen. Die Traversierung ist auf 16 Ebenen, 256 Teile und 524.288 angezeigte UTF-8-Bytes begrenzt. Ignorierte Inline-Binärdaten werden niemals materialisiert; unbekannte oder unbegrenzte Lazy-Display-Quellen schlagen fehl, bevor ein Stream geöffnet oder eine kostenpflichtige Anfrage gestellt wird, und unterstützte Quellenlesevorgänge sind begrenzt. Numeric-entity Framing hält Fragmente durch die geprüfte Server-Normalisierungsreihenfolge inert. Ganze varargs-Batches werden vor der ersten kostenpflichtigen Anfrage vorbereitet und normalisiert, und die Inspektion erzeugt keine Jakarta Mail Header. Eine rekursiv exakte verschachtelte Antwort ist erforderlich.
Magento Open Source Mail-Adapter
0.1.1
Unterstützt nur Magento Open Source 2.4.7-p5 und 2.4.7-p6 mit den exakt überprüften, unveränderlichen mail-interface-Quellen. Offline-typisierte Fixtures wurden bestanden, jedoch wurde keine vollständige Magento-Installation durchgeführt; keine andere Magento- oder Adobe Commerce-Version ist zertifiziert. Installieren Sie das lokale ZIP über ein Composer-Pfad-Repository; es handelt sich nicht um ein Adobe Marketplace-Paket.
Das Modul, die kostenpflichtige Zustimmung und Routenlisten sind standardmäßig deaktiviert. Jeder Template-Identifikator erfordert zwei unabhängige, exakte Genehmigungen; Kritikalität wird niemals vom Namen abgeleitet. Das aroundSendMessage-Plugin analysiert an der finalen Transportgrenze, ohne die Nachricht neu zu erstellen. Die Beratungs-/Blockier-Schwellenwertrichtlinie und die Beibehalten-/Blockier-Fehlerrichtlinie sind unabhängig; Blockieren löst eine sichtbare Magento MailException aus. Mehrere angezeigte MIME-Teile und mehrdeutige Inhalte schlagen vor der Zahlung fehl.
Magento Quell-ZIP herunterladen
Öffentliches Quellcode-Repository
Vollständige README und Beispiele
Sicherheitshinweise und bekannte Einschränkungen
1. Installieren
Entpacken Sie das ZIP in ein dauerhaftes Paketverzeichnis, registrieren Sie dessen SendRepute_MailAdapter Root als Composer path repository, fordern Sie Version 0.1.1 an und nutzen Sie dann den normalen Magento-Prozess für Modul-Aktivierung und Setup-Upgrade. Stellen Sie dieses lokale Archiv nicht als Adobe Marketplace Paket dar.
mkdir -p packages/sendrepute-magento
curl -fLO https://www.sendrepute.com/downloads/sendrepute-magento.zip
unzip sendrepute-magento.zip -d packages/sendrepute-magento
composer config repositories.sendrepute path ./packages/sendrepute-magento/SendRepute_MailAdapter
composer require sendrepute/magento-mail-adapter:0.1.1
bin/magento module:enable SendRepute_MailAdapter
bin/magento setup:upgrade
Alternative: Installation aus öffentlicher Quelle
Verwenden Sie diesen Quellweg anstelle der oben genannten Download-Anweisungen auf der Website. Die README-Datei des Repositorys erklärt die verbleibenden Aktivierungs- und Konfigurationsschritte; das Erstellen einer ZIP-Datei allein installiert kein Plugin. Für Python fügt der zweite Befehl optionale Django-Unterstützung hinzu. Bewahren Sie Zugangsdaten in Server-Secrets auf und lesen Sie die Sicherheitshinweise, bevor Sie kostenpflichtige Funktionen aktivieren. Nur Node ist auf npm; ein öffentliches GitHub-Repository impliziert keine Veröffentlichung auf WordPress.org, n8n Cloud, Packagist oder PyPI.
git clone https://github.com/sendrepute/sendrepute-magento.git
cd sendrepute-magento
2. Sicher konfigurieren
Setzen Sie SENDREPUTE_API_TOKEN nur in der PHP-FPM- und CLI-Serverumgebung. Unter Stores > Configuration > Services > SendRepute lassen Sie das Modul und paidConsent zunächst deaktiviert. Fügen Sie jede exakte Template-ID zu beiden unabhängigen route-approval Listen hinzu; Namen, einschließlich numerischer Namen, lassen niemals auf Kritikalität schließen. Konfigurieren Sie advisory/block, threshold und preserve/block failure behavior separat.
export SENDREPUTE_API_TOKEN="replace-with-a-scoped-server-token"
# Then configure Stores > Configuration > Services > SendRepute.
3. Bewusst nutzen
Verwenden Sie weiterhin den normalen Vorlagen- und Transportfluss von Magento. Die Routenkorrelation zeichnet den exakten Identifikator und den über TransportBuilder ausgewählten Store auf, während das finale aroundSendMessage Plugin die offiziellen typisierten E-Mail- und MIME-Schnittstellen liest, bevor es denselben Transport aufruft. Der Builder-Status wird in finally gelöscht, und Builder/Message-Korrelationen verwenden objektbasierte WeakMap Einträge, sodass ein abgebrochener gebauter Transport keine wiederverwendbare numerische Objekt-ID-Autorisierung hinterlassen kann. Der Adapter stellt keine neue send-Methode bereit und verändert die Nachricht nicht.
Ergebnisse, Fehler und Grenzen
Es wird nur ein unterstützter angezeigter MIME-Part akzeptiert; Anhänge bleiben erhalten, sind aber von der Analyse ausgeschlossen. Mehrere angezeigte Parts, nicht unterstützte Transfer-Encodings oder Zeichensätze, Streams, verschachteltes MIME und mehrdeutiger Normalizer-Text schlagen vor der Zahlung fehl. Eine verifizierte HTTPS-Anfrage hat begrenzte Fristen und Antwortgrößen ohne Retry oder Redirect. Ein gültiges verschachteltes Ergebnis kann ab dem Schwellenwert blockieren; eine konfigurierte Fail-Block-Einstellung löst eine Magento MailException aus.
.NET MailKit-Adapter
0.1.0
Erfordert .NET 8 und exakte Abhängigkeitsnachweise für MailKit/MimeKit 4.18.0. Es handelt sich um einen expliziten Wrapper um einen anwendungseigenen IMailTransport, nicht um einen globalen Hook, SMTP-Client oder Ersatz-Transport. Erstellen oder referenzieren Sie das lokale Quell-ZIP; es wird keine NuGet-Veröffentlichung beansprucht.
Der Adapter und die kostenpflichtige Zustimmung sind standardmäßig deaktiviert; Beratungsmodus und preserve-send sind unabhängige Standardwerte. Aufrufe von AnalyzeAsync, AnalyzeThenSend oder AnalyzeThenSendAsync erfolgen explizit. Kritische Sicherheits- oder Kontomails benötigen eine separate Kategorie pro Aufruf und Zustimmung. Jede unterstützte, angezeigte plain/HTML-Alternative wird passiv in eine begrenzte Anfrage eingebettet; nicht unterstützte, verschachtelte, signierte oder verschlüsselte Inhalte schlagen vor der Zahlung fehl. Die ursprüngliche MimeMessage und das CancellationToken erreichen den bestehenden Transport erst, nachdem die Richtlinie dies zulässt.
Quellcode-ZIP für .NET MailKit herunterladen
Öffentliches Quellcode-Repository
Vollständige README und Beispiele
Sicherheitshinweise und bekannte Einschränkungen
1. Installieren
Extrahieren Sie die Quell-ZIP und referenzieren Sie src/SendRepute.MailKit/SendRepute.MailKit.csproj aus dem konsumierenden .NET 8-Projekt. Restore bezieht MailKit/MimeKit 4.18.0. Dieses Quellpaket ist lokal und nicht veröffentlicht; es handelt sich nicht um eine NuGet-Installation.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-mailkit.zip
unzip sendrepute-mailkit.zip
dotnet add reference ./sendrepute-mailkit-0.1.0/src/SendRepute.MailKit/SendRepute.MailKit.csproj
Alternative: Installation aus öffentlicher Quelle
Verwenden Sie diesen Quellweg anstelle der oben genannten Download-Anweisungen auf der Website. Die README-Datei des Repositorys erklärt die verbleibenden Aktivierungs- und Konfigurationsschritte; das Erstellen einer ZIP-Datei allein installiert kein Plugin. Für Python fügt der zweite Befehl optionale Django-Unterstützung hinzu. Bewahren Sie Zugangsdaten in Server-Secrets auf und lesen Sie die Sicherheitshinweise, bevor Sie kostenpflichtige Funktionen aktivieren. Nur Node ist auf npm; ein öffentliches GitHub-Repository impliziert keine Veröffentlichung auf WordPress.org, n8n Cloud, Packagist oder PyPI.
git clone https://github.com/sendrepute/sendrepute-dotnet.git
cd sendrepute-dotnet
2. Sicher konfigurieren
Umschließen Sie den vorhandenen anwendungseigenen IMailTransport mit dem SendReputeMailAdapter. Lesen Sie den API-Token aus der Serverkonfiguration und lassen Sie Enabled und PaidAnalysisConsent auf false, bis eine Überprüfung erfolgt ist. Die Schwellenwerte für Advisory/Block und die Einstellungen für Preserve/Block bei Fehlern sind unabhängig voneinander. Der Endpunkt, die TLS-Untergrenze, das Verhalten bei einem Versuch, Deadlines und die 1 MiB-Grenzen sind fest vorgegeben.
var options = new SendReputeOptions {
Enabled = false,
PaidAnalysisConsent = false,
ApiToken = configuration["SENDREPUTE_API_KEY"]!,
Enforcement = EnforcementPolicy.Advisory,
OnFailure = FailurePolicy.PreserveSend,
SpamProbabilityThreshold = 0.80
};
var adapter = new SendReputeMailAdapter(existingTransport, new SendReputeClient(options), options);
3. Bewusst nutzen
Rufen Sie AnalyzeAsync nur für die Analyse auf, oder AnalyzeThenSend und AnalyzeThenSendAsync für explizites Verhalten vor dem Senden. Kein gewöhnlicher oder globaler Mail-Pfad wird abgefangen. Übergeben Sie die kostenpflichtige Zustimmung und die Nachrichtenkategorie bei jeder ausgewählten Operation; kritische Sicherheits- oder Kontomails erfordern die separate critical-consent-Einstellung.
await adapter.AnalyzeThenSendAsync(message, new AnalysisConsent {
PaidAnalysisConsent = true,
Category = MessageCategory.Ordinary
}, cancellationToken);
Ergebnisse, Fehler und Grenzen
Das tatsächliche MimeKit-Dekodieren sammelt jede unterstützte angezeigte plain und HTML-Alternative in einem inerten Framing, während Empfänger und Anhänge ausgeschlossen werden. Nicht-base64 äußeres Framing und spät dekodierte Entitäten neutralisieren CSS-Klammern, quoted-printable Text, base64 Header, whole-body base64 und Markup vor der Dienst-Normalisierung. Nicht unterstützte, verschachtelte, signierte oder verschlüsselte angezeigte Inhalte schlagen vor der Zahlung fehl. Jedes erforderliche Antwortfeld ist typisiert; das optionale flaggedTermCount muss eine nicht-negative Ganzzahl sein und das optionale contentAudit wird vollständig und rekursiv gegen den öffentlichen Vertrag validiert. Die exakte originale MimeMessage und das CancellationToken erreichen den bereitgestellten Transport nur, wenn unabhängige Score- und failure-Richtlinien dies zulassen.
Zapier manuelle Entwurfsanalyse
0.2.0
Manuelle Zapier-Rezeptur zur Anzeige der bezahlten Analyse von genau drei vom Eigentümer ausgewählten Entwurfs-Strings. Es handelt sich nicht um eine SendRepute Zapier-App, ein Marketplace-Listing, ein Import-Artefakt, einen pre-send-Adapter, einen Sender, eine allow/block-Route oder einen Klassifizierer für vollständige Nachrichten. Zapier Webhooks verwenden einen vom Eigentümer betriebenen, begrenzten HTTPS-Proxy, da das SENDREPUTE_API_TOKEN nicht in den Zap gelangen darf.
Zwei Kompilierzeit-Konstanten sind vor HTTP standardmäßig auf false gesetzt. Der Zap ordnet nur den Anzeigenamen des Absenders, den Betreff und den Textkörper zu, postet JSON an das enthaltene owner-proxy-Design, validiert die verschachtelte Antwort vollständig und zeigt dann die Advisory- und Abrechnungsfelder in einem privaten Prüfungsschritt an. Er darf keinen Sender, Paths-Erzwingung, Autoreplay oder eine failure-preserve-Route hinzufügen; fehlgeschlagene Code- oder Webhook-Schritte stoppen.
Zapier- und Make-Rezept-ZIP herunterladen
Öffentliches Quellcode-Repository
Vollständige README und Beispiele
Sicherheitshinweise und bekannte Einschränkungen
1. Installieren
Laden Sie die geteilte 0.2.0 Rezeptquelle herunter und extrahieren Sie diese. Lesen Sie den beigefügten Zapier-Leitfaden und stellen Sie den enthaltenen Loopback-Node-Proxy nur hinter einem vom Eigentümer verwalteten HTTPS-Reverse-Proxy bereit. Dieses Paket stellt ihn nicht bereit. Es gibt keine SendRepute Zapier-App oder importierbare Zap-Artefakte.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-automation-recipes.zip
unzip sendrepute-automation-recipes.zip
cd sendrepute-automation-recipes
Alternative: Installation aus öffentlicher Quelle
Verwenden Sie diesen Quellweg anstelle der oben genannten Download-Anweisungen auf der Website. Die README-Datei des Repositorys erklärt die verbleibenden Aktivierungs- und Konfigurationsschritte; das Erstellen einer ZIP-Datei allein installiert kein Plugin. Für Python fügt der zweite Befehl optionale Django-Unterstützung hinzu. Bewahren Sie Zugangsdaten in Server-Secrets auf und lesen Sie die Sicherheitshinweise, bevor Sie kostenpflichtige Funktionen aktivieren. Nur Node ist auf npm; ein öffentliches GitHub-Repository impliziert keine Veröffentlichung auf WordPress.org, n8n Cloud, Packagist oder PyPI.
git clone https://github.com/sendrepute/sendrepute-automation.git
cd sendrepute-automation
2. Sicher konfigurieren
Lassen Sie die Zap ausgeschaltet. In der exakten preflight Code-Quelle bleiben ENABLED und PAID_CONSENT beide false, bis die kostenpflichtige Nutzung überprüft wurde. Der Besitzer-Proxy speichert den SENDREPUTE_API_TOKEN; die Zap erhält nur eine separat widerrufbare Anmeldeinformation aus den SENDREPUTE_PROXY_CREDENTIALS. Editoren und der Aufgabenverlauf könnten diese offenlegen, daher sollte sie eingeschränkt, rotiert und widerrufen werden. Konfigurieren Sie pro Anmeldeinformation Token-Bucket- und Concurrency-Limits, globale Verbindungs-/Concurrency-Caps, ein persistentes, vom Besitzer festgelegtes tägliches Budget für kostenpflichtige Aufrufe, restriktive Upstream-Ausgabenlimits sowie passende TLS-Terminator-Größen-, Raten- und Deadline-Kontrollen. Aktivieren Sie kein Autoreplay.
// In zapier/preflight.js; review charges before changing either literal.
const ENABLED = false;
const PAID_CONSENT = false;
3. Bewusst nutzen
Erstellen Sie die Schritte manuell: Entwurf des Triggers; preflight Code-Mapping nur für Absender, Betreff und Textkörper; Webhooks POST mit JSON-Zeilen an den Besitzer-Proxy; Code zur Validierung der Antwort; private Anzeige zur Überprüfung. Interpolieren Sie niemals manuell rohes JSON. Zeigen Sie nur requestId, Modell, Label, spamProbability und die Abrechnung an; fügen Sie keine Mail-Aktion oder Paths-Entscheidung hinzu.
{
"sender": "Mapped draft sender display name",
"subject": "Mapped draft subject",
"body": "Mapped draft body"
}
Ergebnisse, Fehler und Grenzen
Das Rezept analysiert nur die drei gemappten Strings; nicht gemapptes MIME, HTML-Alternativen, Anhänge und der spätere ausgehende Inhalt bleiben unanalysiert. Konservatives preflight lehnt bekannte Normalisierungs-Trigger ab, beweist jedoch keine Abdeckung der gesamten Nachricht. Proxy-Raten-, Concurrency- und Tagesbudget-Limits lehnen vor dem Upstream ab, und die Budget-Reservierung bleibt vor dem kostenpflichtigen Versuch bestehen; führen Sie einen Proxy-Prozess pro Budget-Datei aus. Der Proxy unternimmt einen begrenzten, festen HTTPS-Versuch. Jede Nicht-200-Antwort oder unvollständige exakte Antwort führt zu einem Fehler und stoppt; es gibt kein preserve, Resume oder Ersatzresultat.
Manuelle Entwurfsanalyse für Make erstellen
0.2.0
Manuelle Anweisungen für ein Make-Szenario zur Anzeige der bezahlten Analyse von exakt drei ausgewählten Entwurfs-Strings. Dies ist kein Blueprint, keine genehmigte SendRepute-App, kein Mail-Sender, kein Durchsetzungsweg und keine Zusage über nicht zugeordnete MIME-Typen, HTML, Anhänge oder den endgültigen ausgehenden Inhalt. Das Bearer-Token gehört ausschließlich in den sicheren Keychain von Make HTTP.
Die persistierten Booleans ENABLED und paidConsent sind standardmäßig false, und ein AND-Filter stoppt vor HTTP. JSON wird vom Make-JSON-Modul erzeugt und einmalig vom HTTP-Modul gesendet, wobei Redirects und Retries deaktiviert sind. Ein Response-Filter dient nur als Anzeige-Guard, nicht als vollständige Validierung oder Sendeerlaubnis. HTTP-Fehler verwenden Break, niemals Resume oder Ersatz-Output.
Zapier und Make Rezept-ZIP herunterladen
Öffentliches Quellcode-Repository
Vollständige README und Beispiele
Sicherheitshinweise und bekannte Einschränkungen
1. Installieren
Laden Sie den geteilten 0.2.0 Rezept-Quelltext herunter, entpacken Sie ihn und folgen Sie der enthaltenen Make-Anleitung, um aktuelle native Module manuell zu erstellen. Es wird kein Blueprint, keine Marketplace-App oder ein Importformat beansprucht. Lassen Sie das Szenario-Scheduling während des Testens gegen einen Mock-Endpunkt ausgeschaltet.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-automation-recipes.zip
unzip sendrepute-automation-recipes.zip
cat sendrepute-automation-recipes/make/README.md
Alternative: Installation aus öffentlicher Quelle
Verwenden Sie diesen Quellweg anstelle der oben genannten Download-Anweisungen auf der Website. Die README-Datei des Repositorys erklärt die verbleibenden Aktivierungs- und Konfigurationsschritte; das Erstellen einer ZIP-Datei allein installiert kein Plugin. Für Python fügt der zweite Befehl optionale Django-Unterstützung hinzu. Bewahren Sie Zugangsdaten in Server-Secrets auf und lesen Sie die Sicherheitshinweise, bevor Sie kostenpflichtige Funktionen aktivieren. Nur Node ist auf npm; ein öffentliches GitHub-Repository impliziert keine Veröffentlichung auf WordPress.org, n8n Cloud, Packagist oder PyPI.
git clone https://github.com/sendrepute/sendrepute-automation.git
cd sendrepute-automation
2. Sicher konfigurieren
Erstellen Sie persistente boolesche Tools-Variablen enabled=false und paidConsent=false, gefolgt von einem AND-Filter, der erfordert, dass beide true sind. Verwenden Sie JSON > Create JSON für exakt Absender, Betreff und Textkörper. Speichern Sie den SendRepute Bearer-Token nur im sicheren Schlüsselbund der HTTP-App; exportierte Szenarien dürfen keine Zugangsdaten enthalten.
Tools variables: enabled = false; paidConsent = false
Filter: enabled = true AND paidConsent = true
HTTP credential: secure keychain; Authorization header
Body type: Raw; Content type: application/json; map serialized JSON
Follow redirect: No; Timeout: 10 seconds; no retry
Response filter: Minimal display guard
3. Bewusst nutzen
Konfigurieren Sie einen HTTP POST an die feste classify URL. Wählen Sie den Body-Typ Raw und die application/json Content-Type-Steuerung aus, ohne einen widersprüchlichen Freitext-Header hinzuzufügen, und ordnen Sie dann die serialisierte Ausgabe von JSON > Create JSON zu. Aktivieren Sie die geparste Antwort, deaktivieren Sie Weiterleitungen, setzen Sie ein Zeitlimit von 10 Sekunden und fügen Sie keinen Repeater oder automatischen Retry hinzu. Erfordern Sie das 1 MiB Antwortlimit des Moduls; falls nicht verfügbar, verwenden Sie stattdessen einen vom Eigentümer kontrollierten, begrenzten Proxy. Fügen Sie nach dem Minimal display guard nur eine private Review-Anzeige hinzu – niemals einen Sender- oder Allow/Block-Router.
{
"sender": "Mapped draft sender display name",
"subject": "Mapped draft subject",
"body": "Mapped draft body"
}
Ergebnisse, Fehler und Grenzen
Nur die zugeordneten Zeichenfolgen werden analysiert; die Normalisierung ist nicht identisch mit einer ursprünglichen oder ausgehenden E-Mail. Der Antwortfilter prüft nur den Status sowie das Vorhandensein von Kernergebnis/Abrechnung und ist ausdrücklich keine vollständige Schema-Validierung oder -Durchsetzung. Bei HTTP-Fehlern wird Break verwendet, damit nachfolgende Aktionen nicht ausgeführt werden; verwenden Sie niemals Resume, künstlich erzeugte Ausgaben oder eine Route zur Fehlererhaltung.
Node.js SDK
0.1.1
Server-only SDK für Node.js 18.17+. Installieren Sie @sendrepute/node von npm oder nutzen Sie den herunterladbaren Tarball. Der optionale Nodemailer-Adapter bewahrt Ihren bestehenden Transport. Legen Sie einen scoped API-Key und eine explizite API-Basis-URL in Ihrer Serverumgebung fest, niemals im Browser-Code.
Registrieren Sie createSendReputePlugin in der Stream-Phase nur nach Überprüfung der Preisgestaltung und bewusster Aktivierung der Zustimmung zur kostenpflichtigen Analyse (paid analysis consent). Der Advisory-Modus meldet Ergebnisse, ohne die Zustellung zu blockieren. Der Blocking-Modus erzwingt spamProbabilityThreshold; onApiFailure wählt allow oder block, während eine verweigerte Preisänderung immer die Zustellung blockiert. Die Klassifizierung ist eine kostenpflichtige API-Operation.
Node.js Tarball herunterladen
Öffentliches Quellcode-Repository
Vollständige README und Beispiele
Sicherheitshinweise und bekannte Einschränkungen
Verifiziertes npm-Paket ansehen
1. Installieren
Das verifizierte npm Paket ist @sendrepute/node Version 0.1.1; fixieren Sie Registry-Installationen auf @sendrepute/node@0.1.1. Der Website-Tarball und das fixierte öffentliche Repository stellen den 0.1.1 Release-Quellcode und Build bereit. Nodemailer ist optional und wird nur für den Transport-Adapter benötigt. Das SDK unterstützt typisierte Kunden-API-Anfragen für account, catalog, classification, AI und builders. Verwenden Sie es in einem Node.js Server, niemals in einem Browser-Bundle.
npm install @sendrepute/node nodemailer
Alternative: Installation aus öffentlicher Quelle
Verwenden Sie diesen Quellweg anstelle der oben genannten Download-Anweisungen auf der Website. Die README-Datei des Repositorys erklärt die verbleibenden Aktivierungs- und Konfigurationsschritte; das Erstellen einer ZIP-Datei allein installiert kein Plugin. Für Python fügt der zweite Befehl optionale Django-Unterstützung hinzu. Bewahren Sie Zugangsdaten in Server-Secrets auf und lesen Sie die Sicherheitshinweise, bevor Sie kostenpflichtige Funktionen aktivieren. Nur Node ist auf npm; ein öffentliches GitHub-Repository impliziert keine Veröffentlichung auf WordPress.org, n8n Cloud, Packagist oder PyPI.
npm install @sendrepute/node@0.1.1
npm install nodemailer
2. Sicher konfigurieren
Injizieren Sie SENDREPUTE_API_KEY aus Ihrem Server-Geheimnis-Speicher und legen Sie die explizite Basis-URL unten für die gehostete Kunden-API fest. Fügen Sie keine Geheimnisse in Befehle, Quelldateien oder Protokolle ein. Gewähren Sie nur die Berechtigungen, die Ihre Operationen erfordern. Das Setup verwendet einen lokalen Rendering-Transport, nicht SMTP; maxRetries ist hier auf Null gesetzt, um kostenpflichtige Versuche bewusst zu steuern.
export SENDREPUTE_API_BASE_URL=https://www.sendrepute.com/api
Nodemailer-Einrichtung
Dieses Beispiel konfiguriert einen lokalen Rendering-Transport und ruft sendMail nicht auf. Das Senden über das konfigurierte Plugin führt eine kostenpflichtige Analyse durch. Ersetzen Sie den lokalen Transport erst durch Ihren bestehenden SMTP-Transport, wenn Sie bereit sind.
import nodemailer from "nodemailer";
import { SendReputeClient } from "@sendrepute/node";
import { createSendReputePlugin } from "@sendrepute/node/nodemailer";
const apiKey = process.env.SENDREPUTE_API_KEY;
const baseUrl = process.env.SENDREPUTE_API_BASE_URL;
if (!apiKey || !baseUrl) {
throw new Error("SENDREPUTE_API_KEY and SENDREPUTE_API_BASE_URL are required");
}
const client = new SendReputeClient({ apiKey, baseUrl, maxRetries: 0 });
const transporter = nodemailer.createTransport({
streamTransport: true,
buffer: true,
newline: "unix",
});
transporter.use("stream", createSendReputePlugin({
client,
policy: {
paidAnalysisConsent: true,
mode: "blocking",
spamProbabilityThreshold: 0.85,
onApiFailure: "block",
},
}));
3. Bewusst nutzen
Verwenden Sie den Client aus dem obigen Setup. Lesen Sie das Konto und die aktuellen Preise, bevor Sie eine Zustimmungsaktion anzeigen. Rufen Sie classifyAfterConsent nur aus einer authentifizierten Server-Aktion nach Bestätigung auf; es gibt die typisierte Klassifizierungs- und Abrechnungsantwort zurück. Das Senden über das konfigurierte Nodemailer-Plugin ist ebenfalls eine kostenpflichtige Klassifizierungsaktion. Der Adapter erfordert paidAnalysisConsent: true und lehnt jeden anderen Wert vor der Registrierung ab; setzen Sie ihn erst nach der Autorisierung.
// Uses client from the setup above; nothing calls this function automatically.
async function classifyAfterConsent({ sender, subject, body, confirmed }) {
if (confirmed !== true) throw new Error("Paid consent required");
return client.request("classifyCustomerEmail", { body: { sender, subject, body } });
}
async function readAccountAndPricing() {
return Promise.all([
client.request("customerGetAccount", {}),
client.request("customerGetPricingSettings", {}),
]);
}
Standard- und native VIP-Builder
Der kostenlose Standard-Builder importiert, validiert, kompiliert und exportiert MJML als HTML, MJML oder als ZIP aus beidem. Der separate native VIP-Builder verwendet ein eigenes Dokumentenformat, nicht MJML: Seine Import-, Validierungs-, Kompilierungs- und Exportvorgänge erfordern eine aktive Mitgliedschaft und eine eigene, offene Zugriffsberechtigung, und sein ZIP enthält drei HTML-CSS-Varianten. Die optionale KI-Generierung ist separat zu bezahlen und erstellt ein editierbares Standard-MJML- oder natives VIP-Design; zeigen Sie die aktuell gültigen Preise an und übergeben Sie den bestätigten expectedPriceMillicents, niemals einen fest hinterlegten Preis. ZIP-Antworten enthalten archiveBase64, kein html-Feld: decodeExportBytes gibt Bytes zurück, die Ihre Anwendung speichern kann. Diese Verarbeitungsendpunkte rufen keine Assets ab, speichern keine Designs und versenden keine E-Mails.
import { decodeExportBytes } from "@sendrepute/node";
async function exportStandardZip(mjml) {
const exported = await client.request("customerStandardBuilderExport", {
body: { mjml, format: "zip", filename: "newsletter.zip" },
});
return decodeExportBytes(exported);
}
async function generateNativeAfterConsent(prompt, expectedPriceMillicents, confirmed) {
if (confirmed !== true) throw new Error("Paid consent required");
return client.request("customerCreateVipEmailTemplate", {
body: { prompt, expectedPriceMillicents },
});
}
Was kann es sonst noch?
Generierte Operations-IDs decken Konto- und Preisabfragen, Klassifizierung und manuelle Bearbeitungen, AI-Rewrite/Vorlagenerstellung, VIP-Pläne/Status/Käufe, native Vorlagen/Zugriffsberechtigungen sowie zustandslose Standard/Native Importe/Exporte ab. Konsultieren Sie die Quellbeispiele und die Kunden-API-Referenz für jeden Anfragetyp, die erforderliche Berechtigung und den aktuellen Preis. Katalogabfragen kaufen keinen Zugang. Neue kostenpflichtige Funktionen erfordern bewusst berechtigte Token und eine explizite Bestätigung in der Benutzeroberfläche.
Ergebnisse, Fehler und Grenzen
SendReputeError macht status, code und requestId zugänglich; bewahren Sie nur diese sicheren operativen Metadaten auf. Protokollieren Sie niemals Bodies, Prompts, Header oder vollständige Antworten. AbortSignal bricht die Arbeit ab; timeoutMs gilt pro Versuch. Begrenzte Retries sind vorgangsspezifisch und der Empfangsschutz ist zeitlich begrenzt, nicht eine exakte Unlimited-Exactly-Once-Abrechnung. Der Advisory Nodemailer-Modus berichtet ohne zu blockieren; das Blockieren verwendet spamProbabilityThreshold und onApiFailure unabhängig voneinander. Testen und bewahren Sie Ihren echten Transport separat auf.
import { SendReputeError } from "@sendrepute/node";
async function readAccountSafely() {
try {
return await client.request("customerGetAccount", {});
} catch (error) {
if (error instanceof SendReputeError) {
console.error({
status: error.status, code: error.code, requestId: error.requestId,
});
}
throw error;
}
}
API- und Methodenreferenz
SendReputeClient erfordert apiKey und baseUrl; das optionale timeoutMs hat einen Standardwert von 30000 (maximal 300000), maxRetries ist standardmäßig 2 (Bereich 0–10), und fetch akzeptiert eine kompatible Server-Implementierung. request(operationId, input, { signal }) gibt die typisierte Antwort der Operation zurück; input enthält Body-, Path- und/oder Query-Felder. Eine ungültige Konfiguration löst einen TypeError aus; API-Fehler verwenden SendReputeError mit status, code, requestId und retryAfterMs. decodeExportBytes konvertiert einen ZIP-Export in ein Uint8Array und weist Nicht-ZIP- oder ungültige base64-Eingaben zurück. OperationInput, OperationResponse und generierte Schema-Typen werden für TypeScript-Aufrufer exportiert.
Alternative: Einen Low-Level-Nodemailer-Transport kapseln
createSendReputeTransport(existingTransport, options) umschließt ein bestehendes Transport-Objekt mit send, optionalen close und verify Methoden; es ist kein sendMail Transporter. Wählen Sie entweder dies oder createSendReputePlugin, nicht beides, um eine doppelte Analyse zu vermeiden. Beide akzeptieren client und policy sowie optional model, Absender-String/resolver, signal und onDiagnostic. Diagnostic-Callbacks können die Zustellung nicht ändern. SendReputeNodemailerError-Codes unterscheiden zwischen ungültigen Richtlinien/Nachrichten, nicht unterstützten Inhalten, Spam-Sperren und API-Fehlersperren. Das veröffentlichte npm 0.1.1 Paket und der Website 0.1.1 Download kombinieren alle angezeigten In-Memory text/plain und text/html Alternativen in einer begrenzten Klassifizierungsanfrage; im Blockierungsmodus lehnen sie nicht unterstützte angezeigte Alternativen ab. Rohe Nachrichten, Streams, Pfade und URLs bleiben nicht unterstützt.
import { createSendReputeTransport } from "@sendrepute/node/nodemailer";
function wrapExistingTransport(existingTransport) {
return createSendReputeTransport(existingTransport, {
client,
policy: {
paidAnalysisConsent: true,
mode: "advisory",
spamProbabilityThreshold: 0.85,
onApiFailure: "block",
},
onDiagnostic(diagnostic) {
console.info(diagnostic.kind, diagnostic.action);
},
});
}
Alle 49 Kunden-API-Operationen
Erweitern Sie eine Operation, um den exakten SDK-Eingabetyp, Rückgabetyp, Scope und die dokumentierten HTTP-Status zu sehen. Der Schema-Link öffnet die vollständigen Parameter, Antwortfelder und Beispiele in der Kunden-API-Referenz. Diese Wrapper verwenden den oben konfigurierten Client; eine Bestätigung ist erforderlich und nichts wird automatisch ausgeführt. Leseoperationen autorisieren keine Käufe. Mutationen, Zahlungen, Zugriffsschließungen und kostenpflichtige KI erfordern die entsprechende bewusste Kontoaktion.
Angebot für eine aggregierte Kampagnen-Insight-Analyse einholen
POST /v1/campaign-insights/quote
Erforderlicher Scope: ai:generate
Eingabe: { body: CustomerCampaignInsightsQuoteInput; }
Rückgabe: CustomerCampaignInsightsQuote
Dokumentierte HTTP-Status: 200, 400, 401, 403, 429, 503
Parameter, Schemata und HTTP-Beispiele
// The configured server-side client needs ai:generate scope.
// A quote is free; it does not authorize or start paid analysis.
const quote = await client.request("customerQuoteCampaignInsights", { body: {} });
// quote.priceMillicents: 10000 (USD 0.10) regular, 5000 (USD 0.05) active VIP.
// The quoted rate can change; obtain fresh consent before analysis.
Aggregierte Kampagnen-Zustellungsmetriken mit KI analysieren
POST /v1/campaign-insights/analyze
Erforderlicher Scope: ai:generate
Eingabe: { body: CustomerCampaignInsightsAnalyzeInput; }
Rückgabe: CustomerCampaignInsightsAnalysis
Dokumentierte HTTP-Status: 200, 400, 401, 402, 403, 409, 413, 429, 502, 503
Parameter, Schemata und HTTP-Beispiele
import { randomUUID } from "node:crypto";
import type { CustomerCampaignInsightsMetrics } from "@sendrepute/node";
async function analyzeReviewedAggregate(
metrics: CustomerCampaignInsightsMetrics,
paidConsent: boolean,
) {
if (paidConsent !== true) throw new Error("Explicit price consent required");
// Aggregate counts/rates only: never include campaign IDs, contacts,
// message bodies or individual events. Requires ai:generate scope.
const quote = await client.request("customerQuoteCampaignInsights", { body: {} });
const body = {
analysisId: randomUUID(), // Persist this opaque ID and exact body for safe replay.
expectedPriceMillicents: quote.priceMillicents,
consent: true as const,
metrics,
};
// USD 0.10 regular or USD 0.05 active VIP; no automatic retry on a paid request.
// 409 PRICE_CHANGED requires a new quote and fresh consent, not blind retry.
// Aggregate input and result expire after 30 days.
return client.request("customerAnalyzeCampaignInsights", { body });
}
Kunden-API-Klassifizierungsmodelle auflisten
GET /v1/models
Erforderlicher Scope: models:read
Eingabe: Record<string, never>
Rückgabe: CustomerApiModelsResponse
Dokumentierte HTTP-Status: 200, 401, 403, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function getCustomerApiModels(
input: OperationInput<"getCustomerApiModels">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"getCustomerApiModels">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("getCustomerApiModels", input, { signal });
}
API-Nutzung und Limits des Kunden abrufen
GET /v1/usage
Erforderlicher Scope: usage:read
Eingabe: Record<string, never>
Rückgabe: CustomerApiUsageResponse
Dokumentierte HTTP-Status: 200, 401, 403, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function getCustomerApiUsage(
input: OperationInput<"getCustomerApiUsage">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"getCustomerApiUsage">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("getCustomerApiUsage", input, { signal });
}
Eine Kunden-E-Mail klassifizieren
POST /v1/classify
Erforderlicher Scope: classify
Eingabe: { body: CustomerClassificationInput; }
Rückgabe: CustomerClassificationResponse
Dokumentierte HTTP-Status: 200, 400, 401, 402, 403, 409, 413, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function classifyCustomerEmail(
input: OperationInput<"classifyCustomerEmail">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"classifyCustomerEmail">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("classifyCustomerEmail", input, { signal });
}
Aktuelles Konto und Guthaben abrufen
GET /v1/account
Erforderlicher Scope: account:read
Eingabe: Record<string, never>
Rückgabe: Account
Dokumentierte HTTP-Status: 200, 400, 401, 403, 404, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetAccount(
input: OperationInput<"customerGetAccount">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetAccount">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetAccount", input, { signal });
}
Empfehlungslink und Belohnungsaktivitäten des aktuellen Kontos abrufen
GET /v1/account/referrals
Erforderlicher Scope: account:read
Eingabe: { query?: { page?: number; pageSize?: number; }; }
Rückgabe: ReferralDashboard
Dokumentierte HTTP-Status: 200, 400, 401, 403, 404, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetAccountReferrals(
input: OperationInput<"customerGetAccountReferrals">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetAccountReferrals">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetAccountReferrals", input, { signal });
}
Kredit-Hauptbuch des aktuellen Kontos auflisten
GET /v1/account/ledger
Erforderlicher Scope: billing:read
Eingabe: { query?: { kind?: "usage" | "payments"; limit?: number; offset?: number; }; }
Rückgabe: Array<CreditLedgerEntry>
Dokumentierte HTTP-Status: 200, 400, 401, 403, 404, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetCreditLedger(
input: OperationInput<"customerGetCreditLedger">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetCreditLedger">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetCreditLedger", input, { signal });
}
Bitcoin-Rechnungen des aktuellen Kontos auflisten
GET /v1/payments/invoices
Erforderlicher Scope: billing:read
Eingabe: { query?: { limit?: number; offset?: number; }; }
Rückgabe: Array<BitcoinInvoice>
Dokumentierte HTTP-Status: 200, 400, 401, 403, 404, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerListPaymentInvoices(
input: OperationInput<"customerListPaymentInvoices">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerListPaymentInvoices">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerListPaymentInvoices", input, { signal });
}
Eine auf USD lautende Bitcoin-Einzahlungsrechnung erstellen
POST /v1/payments/invoices
Erforderlicher Scope: billing:write
Eingabe: { body: InvoiceInput; }
Rückgabe: BitcoinInvoice
Dokumentierte HTTP-Status: 201, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerCreatePaymentInvoice(
input: OperationInput<"customerCreatePaymentInvoice">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerCreatePaymentInvoice">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerCreatePaymentInvoice", input, { signal });
}
Eine unbezahlte Bitcoin-Rechnung ausblenden
DELETE /v1/payments/invoices/{invoiceId}
Erforderlicher Scope: billing:write
Eingabe: { path: { invoiceId: string; }; }
Rückgabe: undefined
Dokumentierte HTTP-Status: 204, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerDeletePaymentInvoice(
input: OperationInput<"customerDeletePaymentInvoice">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerDeletePaymentInvoice">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerDeletePaymentInvoice", input, { signal });
}
GET /payments/methods
GET /v1/payments/methods
Erforderlicher Scope: billing:read
Eingabe: Record<string, never>
Rückgabe: Array<PaymentMethod>
Dokumentierte HTTP-Status: 200, 400, 401, 403, 404, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerListPaymentMethods(
input: OperationInput<"customerListPaymentMethods">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerListPaymentMethods">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerListPaymentMethods", input, { signal });
}
Das aktuell aktive Bitcoin-Einzahlungsbonus-Angebot abrufen
GET /v1/payments/deposit-offer
Erforderlicher Scope: billing:read
Eingabe: Record<string, never>
Rückgabe: DepositBonusOffer | null
Dokumentierte HTTP-Status: 200, 400, 401, 403, 404, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetActiveDepositOffer(
input: OperationInput<"customerGetActiveDepositOffer">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetActiveDepositOffer">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetActiveDepositOffer", input, { signal });
}
Bestätigungen für Rechnungen des aktuellen Kontos aktualisieren
POST /v1/payments/refresh
Erforderlicher Scope: billing:write
Eingabe: Record<string, never>
Rückgabe: Array<BitcoinInvoice>
Dokumentierte HTTP-Status: 200, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerRefreshMyPayments(
input: OperationInput<"customerRefreshMyPayments">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerRefreshMyPayments">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerRefreshMyPayments", input, { signal });
}
Aktuelle öffentliche Analyse- und Bearbeitungspreise abrufen
GET /v1/pricing
Erforderlicher Scope: catalog:read
Eingabe: Record<string, never>
Rückgabe: PricingSettings
Dokumentierte HTTP-Status: 200, 400, 401, 403, 404, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetPricingSettings(
input: OperationInput<"customerGetPricingSettings">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetPricingSettings">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetPricingSettings", input, { signal });
}
Aktuelle öffentliche VIP-Angebote und Vergleichspreise abrufen
GET /v1/vip/plans
Erforderlicher Scope: catalog:read
Eingabe: Record<string, never>
Rückgabe: VipPlanQuote
Dokumentierte HTTP-Status: 200, 400, 401, 403, 404, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetVipPlans(
input: OperationInput<"customerGetVipPlans">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetVipPlans">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetVipPlans", input, { signal });
}
GET /vip
GET /v1/vip
Erforderlicher Scope: vip:read
Eingabe: Record<string, never>
Rückgabe: VipState
Dokumentierte HTTP-Status: 200, 400, 401, 403, 404, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetVip(
input: OperationInput<"customerGetVip">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetVip">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetVip", input, { signal });
}
POST /vip/purchase
POST /v1/vip/purchase
Erforderlicher Scope: vip:purchase
Eingabe: { body: CustomerVipPurchaseInput; }
Rückgabe: VipPurchaseResult
Dokumentierte HTTP-Status: 200, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerPurchaseVip(
input: OperationInput<"customerPurchaseVip">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerPurchaseVip">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerPurchaseVip", input, { signal });
}
Angebot für Bearbeitung und erneute Prüfung gegen eine gespeicherte Klassifizierung einholen
POST /v1/rewrite/quote
Erforderlicher Scope: rewrite
Eingabe: { body: EditQuoteInput; }
Rückgabe: EditQuote
Dokumentierte HTTP-Status: 200, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerQuoteClassificationEdit(
input: OperationInput<"customerQuoteClassificationEdit">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerQuoteClassificationEdit">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerQuoteClassificationEdit", input, { signal });
}
Angebot für Bearbeitung und erneute Prüfung gegen eine gespeicherte Klassifizierung einholen
POST /v1/classify/edit/quote
Erforderlicher Scope: classify
Eingabe: { body: EditQuoteInput; }
Rückgabe: EditQuote
Dokumentierte HTTP-Status: 200, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerQuoteManualClassificationEdit(
input: OperationInput<"customerQuoteManualClassificationEdit">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerQuoteManualClassificationEdit">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerQuoteManualClassificationEdit", input, { signal });
}
Eine E-Mail anhand von Absendername, Betreff und Inhalt klassifizieren
POST /v1/classify/edit
Erforderlicher Scope: classify
Eingabe: { body: CustomerManualEditInput; }
Rückgabe: CustomerManualEditResult
Dokumentierte HTTP-Status: 200, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerClassifyEmail(
input: OperationInput<"customerClassifyEmail">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerClassifyEmail">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerClassifyEmail", input, { signal });
}
Fordern Sie eine separat zu zahlende KI-Umschreibung ausgewählter markierter Begriffe an und klassifizieren Sie das Ergebnis neu
POST /v1/rewrite
Erforderlicher Scope: rewrite
Eingabe: { body: CustomerAiRewriteInput; }
Rückgabe: AiRewriteResult
Dokumentierte HTTP-Status: 200, 400, 401, 402, 403, 404, 409, 413, 429, 502, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerRewriteFlaggedTermsWithAi(
input: OperationInput<"customerRewriteFlaggedTermsWithAi">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerRewriteFlaggedTermsWithAi">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerRewriteFlaggedTermsWithAi", input, { signal });
}
Überprüfen Sie einen exakt gerenderten endgültigen Entwurf mit einem vorhandenen bezahlten „Rewrite All“-Beleg ohne erneute Belastung
POST /v1/rewrite/finalize
Erforderlicher Scope: rewrite
Eingabe: { body: { requestId: string; sender: string; subject: string; body: string; }; }
Rückgabe: { requestId: string; input: RewrittenClassificationInput; classification: ClassificationResult; }
Dokumentierte HTTP-Status: 200, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerFinalizeAiRewrite(
input: OperationInput<"customerFinalizeAiRewrite">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerFinalizeAiRewrite">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerFinalizeAiRewrite", input, { signal });
}
Rufen Sie einen vorhandenen, abgeschlossenen und bezahlten KI-Umschreibungsbeleg ab
GET /v1/rewrite/result/{requestId}
Erforderlicher Scope: rewrite
Eingabe: { path: { requestId: string; }; }
Rückgabe: AiRewriteResult
Dokumentierte HTTP-Status: 200, 400, 401, 403, 404, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetAiRewriteResult(
input: OperationInput<"customerGetAiRewriteResult">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetAiRewriteResult">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetAiRewriteResult", input, { signal });
}
Den autorisierten Höchstpreis für ein separat bezahltes KI-Umschreiben angeben
POST /v1/rewrite/ai-quote
Erforderlicher Scope: rewrite
Eingabe: { body: AiRewriteQuoteInput; }
Rückgabe: AiRewriteQuote
Dokumentierte HTTP-Status: 200, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerQuoteAiRewrite(
input: OperationInput<"customerQuoteAiRewrite">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerQuoteAiRewrite">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerQuoteAiRewrite", input, { signal });
}
Erstellen Sie ein bearbeitbares MJML-Standard-E-Mail-Design mit KI zum bestätigten Kontopreis
POST /v1/email-builder/ai-template
Erforderlicher Scope: ai:generate
Eingabe: { body: CustomerAiEmailTemplateInput; }
Rückgabe: AiEmailTemplateResult
Dokumentierte HTTP-Status: 200, 400, 401, 402, 403, 404, 409, 413, 429, 502, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerCreateAiEmailTemplate(
input: OperationInput<"customerCreateAiEmailTemplate">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerCreateAiEmailTemplate">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerCreateAiEmailTemplate", input, { signal });
}
Erstellen Sie ein bearbeitbares natives VIP-E-Mail-Design mit KI zum bestätigten Mitgliederpreis
POST /v1/vip/email-template
Erforderlicher Scope: ai:generate
Eingabe: { body: CustomerVipEmailTemplateInput; }
Rückgabe: CustomerVipEmailTemplateResult
Dokumentierte HTTP-Status: 200, 400, 401, 402, 403, 404, 409, 413, 429, 502, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerCreateVipEmailTemplate(
input: OperationInput<"customerCreateVipEmailTemplate">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerCreateVipEmailTemplate">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerCreateVipEmailTemplate", input, { signal });
}
Eine Standard-Editor-Sitzung für E-Mail-Design kostenlos öffnen
POST /v1/email-builder/access
Erforderlicher Scope: builder:write
Eingabe: { body: CustomerEmailBuilderAccessInput; }
Rückgabe: EmailBuilderAccess
Dokumentierte HTTP-Status: 200, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerAccessEmailBuilder(
input: OperationInput<"customerAccessEmailBuilder">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerAccessEmailBuilder">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerAccessEmailBuilder", input, { signal });
}
GET /email-builder/access/{accessId}
GET /v1/email-builder/access/{accessId}
Erforderlicher Scope: builder:read
Eingabe: { query?: { designId?: string; }; path: { accessId: string; }; }
Rückgabe: EmailBuilderActiveAccess
Dokumentierte HTTP-Status: 200, 400, 401, 403, 404, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetEmailBuilderAccess(
input: OperationInput<"customerGetEmailBuilderAccess">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetEmailBuilderAccess">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetEmailBuilderAccess", input, { signal });
}
DELETE /email-builder/access/{accessId}
DELETE /v1/email-builder/access/{accessId}
Erforderlicher Scope: builder:write
Eingabe: { path: { accessId: string; }; }
Rückgabe: undefined
Dokumentierte HTTP-Status: 204, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerCloseEmailBuilderAccess(
input: OperationInput<"customerCloseEmailBuilderAccess">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerCloseEmailBuilderAccess">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerCloseEmailBuilderAccess", input, { signal });
}
POST /vip/email-builder/access
POST /v1/vip/email-builder/access
Erforderlicher Scope: vip:builder
Eingabe: { body: CustomerVipBuilderAccessInput; }
Rückgabe: VipBuilderAccess
Dokumentierte HTTP-Status: 201, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerCreateVipEmailBuilderAccess(
input: OperationInput<"customerCreateVipEmailBuilderAccess">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerCreateVipEmailBuilderAccess">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerCreateVipEmailBuilderAccess", input, { signal });
}
GET /vip/email-builder/access/{accessId}
GET /v1/vip/email-builder/access/{accessId}
Erforderlicher Scope: builder:read
Eingabe: { path: { accessId: string; }; }
Rückgabe: VipBuilderAccess
Dokumentierte HTTP-Status: 200, 400, 401, 403, 404, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetVipEmailBuilderAccess(
input: OperationInput<"customerGetVipEmailBuilderAccess">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetVipEmailBuilderAccess">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetVipEmailBuilderAccess", input, { signal });
}
DELETE /vip/email-builder/access/{accessId}
DELETE /v1/vip/email-builder/access/{accessId}
Erforderlicher Scope: vip:builder
Eingabe: { path: { accessId: string; }; }
Rückgabe: undefined
Dokumentierte HTTP-Status: 204, 400, 401, 402, 403, 404, 409, 413, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerDeleteVipEmailBuilderAccess(
input: OperationInput<"customerDeleteVipEmailBuilderAccess">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerDeleteVipEmailBuilderAccess">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerDeleteVipEmailBuilderAccess", input, { signal });
}
Read permanent paid-result evidence with the original account and credential
GET /customer/paid-results/{recoveryId}
Erforderlicher Scope: authenticated original credential
Eingabe: { path: { recoveryId: string; }; }
Rückgabe: { status: "pending" | "succeeded" | "failed"; operation: "customerStandardAiGenerate" | "customerVipAiGenerate" | "customerVipBuilderAccess"; settlement: { kind: "paid_result" | "no_charge" | "confirmed_refund" | "unresolved"; accountId: string; credentialId: string | null; recoveryId: string; receiptId: string; chargeMillicents?: number; refundMillicents?: number; deletedAt?: string; }; result?: { [key: string]: unknown; }; error?: { [key: string]: unknown; }; }
Dokumentierte HTTP-Status: 200, 400, 401, 403, 404, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetPaidResult(
input: OperationInput<"customerGetPaidResult">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetPaidResult">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetPaidResult", input, { signal });
}
Read the authenticated account and credential identity before paid dispatch
GET /customer/paid-results/identity
Erforderlicher Scope: authenticated credential
Eingabe: Record<string, never>
Rückgabe: { accountId: string; credentialId: string; }
Dokumentierte HTTP-Status: 200, 401, 403, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerPaidResultIdentity(
input: OperationInput<"customerPaidResultIdentity">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerPaidResultIdentity">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerPaidResultIdentity", input, { signal });
}
Explicitly resolve an owned paid result with the original credential and service scope
POST /customer/paid-results/{recoveryId}/resolve
Erforderlicher Scope: original ai:generate or vip:builder service scope
Eingabe: { body: { action: "resolve"; reason: string; }; path: { recoveryId: string; }; }
Rückgabe: { status: "pending" | "succeeded" | "failed"; operation: "customerStandardAiGenerate" | "customerVipAiGenerate" | "customerVipBuilderAccess"; settlement: { kind: "paid_result" | "no_charge" | "confirmed_refund" | "unresolved"; accountId: string; credentialId: string | null; recoveryId: string; receiptId: string; chargeMillicents?: number; refundMillicents?: number; deletedAt?: string; }; result?: { [key: string]: unknown; }; error?: { [key: string]: unknown; }; }
Dokumentierte HTTP-Status: 200, 400, 401, 403, 404, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerResolvePaidResult(
input: OperationInput<"customerResolvePaidResult">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerResolvePaidResult">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerResolvePaidResult", input, { signal });
}
Importieren und Kompilieren eines Standard-MJML-Designs ohne Speichern oder Senden
POST /v1/email-builder/import
Erforderlicher Scope: builder:write
Eingabe: { body: CustomerStandardBuilderInput; }
Rückgabe: CustomerStandardBuilderImportResult
Dokumentierte HTTP-Status: 200, 400, 401, 403, 404, 413, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerStandardBuilderImport(
input: OperationInput<"customerStandardBuilderImport">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerStandardBuilderImport">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerStandardBuilderImport", input, { signal });
}
Validieren und Kompilieren eines Standard-MJML-Designs ohne Speichern oder Senden
POST /v1/email-builder/validate
Erforderlicher Scope: builder:write
Eingabe: { body: CustomerStandardBuilderInput; }
Rückgabe: CustomerStandardBuilderValidateResult
Dokumentierte HTTP-Status: 200, 400, 401, 403, 404, 413, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerStandardBuilderValidate(
input: OperationInput<"customerStandardBuilderValidate">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerStandardBuilderValidate">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerStandardBuilderValidate", input, { signal });
}
Kompilieren eines Standard-MJML-Designs zu HTML ohne Speichern oder Senden
POST /v1/email-builder/compile
Erforderlicher Scope: builder:write
Eingabe: { body: CustomerStandardBuilderInput; }
Rückgabe: CustomerStandardBuilderCompileResult
Dokumentierte HTTP-Status: 200, 400, 401, 403, 404, 413, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerStandardBuilderCompile(
input: OperationInput<"customerStandardBuilderCompile">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerStandardBuilderCompile">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerStandardBuilderCompile", input, { signal });
}
Exportieren Sie ein MJML-Standarddesign als HTML, MJML oder ZIP ohne Versand
POST /v1/email-builder/export
Erforderlicher Scope: builder:write
Eingabe: { body: CustomerStandardBuilderInput; }
Rückgabe: CustomerStandardBuilderExportResult
Dokumentierte HTTP-Status: 200, 400, 401, 403, 404, 413, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerStandardBuilderExport(
input: OperationInput<"customerStandardBuilderExport">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerStandardBuilderExport">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerStandardBuilderExport", input, { signal });
}
Importieren und kompilieren Sie ein natives VIP-Design mit aktiver Mitgliedschaft und eigenem offenen Zugang
POST /v1/vip/email-builder/import
Erforderlicher Scope: vip:builder
Eingabe: { body: CustomerNativeBuilderInput; }
Rückgabe: CustomerNativeBuilderImportResult
Dokumentierte HTTP-Status: 200, 400, 401, 403, 404, 413, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerNativeBuilderImport(
input: OperationInput<"customerNativeBuilderImport">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerNativeBuilderImport">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerNativeBuilderImport", input, { signal });
}
Validieren und kompilieren Sie ein natives VIP-Design mit aktiver Mitgliedschaft und eigenem offenen Zugang
POST /v1/vip/email-builder/validate
Erforderlicher Scope: vip:builder
Eingabe: { body: CustomerNativeBuilderInput; }
Rückgabe: CustomerNativeBuilderValidateResult
Dokumentierte HTTP-Status: 200, 400, 401, 403, 404, 413, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerNativeBuilderValidate(
input: OperationInput<"customerNativeBuilderValidate">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerNativeBuilderValidate">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerNativeBuilderValidate", input, { signal });
}
Kompilieren Sie ein natives VIP-Design in HTML mit aktiver Mitgliedschaft und eigenem offenen Zugang
POST /v1/vip/email-builder/compile
Erforderlicher Scope: vip:builder
Eingabe: { body: CustomerNativeBuilderInput; }
Rückgabe: CustomerNativeBuilderCompileResult
Dokumentierte HTTP-Status: 200, 400, 401, 403, 404, 413, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerNativeBuilderCompile(
input: OperationInput<"customerNativeBuilderCompile">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerNativeBuilderCompile">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerNativeBuilderCompile", input, { signal });
}
Exportieren Sie ein natives VIP-Design als HTML oder als HTML-ZIP mit drei Varianten ohne Versand
POST /v1/vip/email-builder/export
Erforderlicher Scope: vip:builder
Eingabe: { body: CustomerNativeBuilderInput; }
Rückgabe: CustomerNativeBuilderExportResult
Dokumentierte HTTP-Status: 200, 400, 401, 403, 404, 413, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerNativeBuilderExport(
input: OperationInput<"customerNativeBuilderExport">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerNativeBuilderExport">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerNativeBuilderExport", input, { signal });
}
Starten Sie eine einmalige Standard- oder VIP-Native-Hosted-Editor-Übergabe
POST /v1/email-builder/hosted-handoffs
Erforderlicher Scope: builder:write
Eingabe: { body: CustomerHostedBuilderHandoffInput; }
Rückgabe: CustomerHostedBuilderHandoff
Dokumentierte HTTP-Status: 201, 400, 401, 403, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerCreateHostedBuilderHandoff(
input: OperationInput<"customerCreateHostedBuilderHandoff">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerCreateHostedBuilderHandoff">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerCreateHostedBuilderHandoff", input, { signal });
}
Vip-Builder Vorlagen auflisten
GET /v1/vip/email-builder/templates
Erforderlicher Scope: vip:read
Eingabe: Record<string, never>
Rückgabe: CustomerVipTemplateCatalog
Dokumentierte HTTP-Status: 200, 400, 401, 403, 404, 413, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerListVipBuilderTemplates(
input: OperationInput<"customerListVipBuilderTemplates">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerListVipBuilderTemplates">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerListVipBuilderTemplates", input, { signal });
}
VIP-Builder-Vorlage abrufen
GET /v1/vip/email-builder/templates/{templateId}
Erforderlicher Scope: vip:read
Eingabe: { path: { templateId: string; }; }
Rückgabe: CustomerVipTemplateDocument
Dokumentierte HTTP-Status: 200, 400, 401, 403, 404, 413, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetVipBuilderTemplate(
input: OperationInput<"customerGetVipBuilderTemplate">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetVipBuilderTemplate">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetVipBuilderTemplate", input, { signal });
}
Standard-Builder-Vorlagen auflisten
GET /v1/email-builder/templates
Erforderlicher Scope: catalog:read
Eingabe: Record<string, never>
Rückgabe: CustomerStandardTemplateCatalog
Dokumentierte HTTP-Status: 200, 400, 401, 403, 404, 413, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerListStandardBuilderTemplates(
input: OperationInput<"customerListStandardBuilderTemplates">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerListStandardBuilderTemplates">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerListStandardBuilderTemplates", input, { signal });
}
Standard-Builder-Vorlage abrufen
GET /v1/email-builder/templates/{templateId}
Erforderlicher Scope: catalog:read
Eingabe: { path: { templateId: string; }; }
Rückgabe: CustomerStandardTemplateDetail
Dokumentierte HTTP-Status: 200, 400, 401, 403, 404, 413, 429, 503
Parameter, Schemata und HTTP-Beispiele
import type { OperationInput, OperationResponse } from "@sendrepute/node";
async function customerGetStandardBuilderTemplate(
input: OperationInput<"customerGetStandardBuilderTemplate">,
confirmed: boolean,
signal?: AbortSignal,
): Promise<OperationResponse<"customerGetStandardBuilderTemplate">> {
if (confirmed !== true) throw new Error("Explicit action confirmation required");
return client.request("customerGetStandardBuilderTemplate", input, { signal });
}
Self-hosted n8n Node
0.1.0
Erfordert Node.js 20.19+ und eine gepatchte selbstgehostete n8n-Installation, die n8n-workflow >=2.39.3 <3 bereitstellt. Führen Sie keine erzwungene Installation auf einem älteren inkompatiblen Host durch. Installieren Sie den heruntergeladenen Tarball in Ihrem custom-node-Verzeichnis und starten Sie n8n neu. Dieser unveröffentlichte Node ist nicht über n8n Cloud oder eine npm-name Community-Installation verfügbar.
Die kostenpflichtige Zustimmung ist standardmäßig deaktiviert. Jedes Element, dem zugestimmt wurde, führt eine Klassifizierungsanfrage ohne automatische Wiederholungsversuche durch. Die Ergebnisse werden im Namespace sendrepute abgelegt. Verwenden Sie vor dem Senden ein IF-Gate für sendrepute.allowed und prüfen Sie den Fehlerstatus separat. Beratungs- und Sperrmodi geben explizite Entscheidungen zurück. Der Node selbst versendet keine E-Mails.
n8n-Tarball herunterladen
Öffentliches Quellcode-Repository
Vollständige README und Beispiele
Sicherheitshinweise und bekannte Einschränkungen
1. Installieren
Führen Sie den Befehl auf dem selbstgehosteten n8n-Host aus und starten Sie dann den n8n-Dienst mit Ihrem normalen Prozessmanager neu. Bestätigen Sie, dass SendRepute in der Knotenauswahl erscheint. Importieren Sie die extrahierte package/examples/classify-email.workflow.json aus dem n8n-Editor. Eine npm-name Community-Nodes-Installation und n8n Cloud werden von diesem unveröffentlichten Paket nicht unterstützt.
mkdir -p ~/.n8n/nodes
cd ~/.n8n/nodes
curl -fLO https://www.sendrepute.com/downloads/sendrepute-n8n.tgz
npm install ./sendrepute-n8n.tgz
tar -xzf sendrepute-n8n.tgz package/examples/classify-email.workflow.json
Alternative: Installation aus öffentlicher Quelle
Verwenden Sie diesen Quellweg anstelle der oben genannten Download-Anweisungen auf der Website. Die README-Datei des Repositorys erklärt die verbleibenden Aktivierungs- und Konfigurationsschritte; das Erstellen einer ZIP-Datei allein installiert kein Plugin. Für Python fügt der zweite Befehl optionale Django-Unterstützung hinzu. Bewahren Sie Zugangsdaten in Server-Secrets auf und lesen Sie die Sicherheitshinweise, bevor Sie kostenpflichtige Funktionen aktivieren. Nur Node ist auf npm; ein öffentliches GitHub-Repository impliziert keine Veröffentlichung auf WordPress.org, n8n Cloud, Packagist oder PyPI.
git clone https://github.com/sendrepute/n8n-nodes-sendrepute.git
cd n8n-nodes-sendrepute
npm ci
npm run pack:check
npm pack --ignore-scripts
archive="$PWD/n8n-nodes-sendrepute-0.1.0.tgz"
mkdir -p ~/.n8n/nodes
cd ~/.n8n/nodes
npm install "$archive"
2. Sicher konfigurieren
Erstellen Sie eine SendRepute-API-Anmeldeinformation mit einem Customer-Key im Bereich 'classify' im n8n-Anmeldeinformationsspeicher. Platzieren Sie diesen niemals in Workflow-JSON oder Ausdrücken. Das untenstehende JSON zeigt Knotenparameter, keinen vollständigen importierbaren Workflow. Ordnen Sie Absender-Anzeigename, Betreff und Body zu; wählen Sie Advisory/Blocking, Threshold und eine Open/Closed Failure-Policy. Prüfen Sie die Preise, bevor Sie paidConsent auf true setzen. Jedes zustimmende Element führt höchstens eine Anfrage aus.
{
"operation": "classify",
"paidConsent": false,
"sender": "={{ $json.sender }}",
"subject": "={{ $json.subject }}",
"body": "={{ $json.body }}",
"decisionMode": "blocking",
"threshold": 0.8,
"failurePolicy": "closed"
}
3. Bewusst nutzen
Platzieren Sie einen IF-Knoten unmittelbar nach SendRepute und verwenden Sie diese boolesche Bedingung. Verbinden Sie nur den true-Ausgang mit Ihrem vorhandenen E-Mail-Knoten; leiten Sie false zur Überprüfung oder zum Stoppen weiter. Überprüfen Sie analysisStatus separat, selbst wenn allowed auf true steht. Der enthaltene Workflow startet mit deaktivierter kostenpflichtiger Zustimmung und enthält keine Anmeldeinformationen. SendRepute selbst versendet niemals E-Mails.
{{ $json.sendrepute.allowed === true }}
Ergebnisse, Fehler und Grenzen
Erfolgreiche Ergebnisse ersetzen den sendrepute-Namespace durch analysisStatus, decision, allowed, recommendation, validierte Werte und Abrechnungsfelder. Fehler lassen spam-Scores weg und geben bereinigte failureCategory/errorCode zurück. Geschlossene Fehler blockieren; offene Fehler lassen durch, markieren analysisStatus jedoch als failed. Beratende Erfolge lassen unabhängig von recommendation immer durch. Consent-off gibt not_run zurück. Es gibt keine Wiederholungsversuche, recipients, attachments, rewrites, model selector oder benutzerdefinierte Endpunkte. Das aktualisierte Quell-Abhängigkeits-Audit meldete null Befunde; dies ist ein punktuelles Ergebnis, keine Sicherheitszertifizierung. Halten Sie die selbstgehostete Runtime gepatcht und lesen Sie SECURITY.md vor der Installation.
Laravel-Integration
0.1.0
Zielgruppe sind PHP 8.2+ und Laravel 12–13. Installieren Sie die ZIP-Datei über ein lokales Composer-Artifact-Repository oder entpacken Sie diese und konfigurieren Sie ein Composer-Path-Repository, wie in der beiliegenden README beschrieben. Es wird keine Packagist-Veröffentlichung beansprucht.
Die kostenpflichtige Zustimmung und der Mail-Hook sind standardmäßig deaktiviert. Selbst wenn sie aktiviert sind, muss jede Nachricht explizit mit X-SendRepute-Classify: yes zustimmen. Der Header wird vor der Zustellung entfernt. Beratungs- und Blockierungsmodi haben unabhängige Fehlerrichtlinien; Passwort-Resets und transaktionale E-Mails bleiben unberührt, sofern nicht explizit zugestimmt wurde.
Laravel-ZIP herunterladen
Öffentliches Quellcode-Repository
Vollständige README und Beispiele
Sicherheitshinweise und bekannte Einschränkungen
1. Installieren
Führen Sie den Befehl innerhalb Ihrer Laravel-Anwendung aus. Diese Befehle extrahieren den Download und registrieren ein Composer-Pfad-Repository; dies ist keine Packagist-Installation. Die Paket-Entdeckung registriert den Provider, und vendor:publish erstellt config/sendrepute.php. Halten Sie das extrahierte Paketverzeichnis für Composer verfügbar. Ein Artifact-Repository ist eine weitere Option, die in der README dokumentiert ist.
mkdir -p packages
curl -fL https://www.sendrepute.com/downloads/sendrepute-laravel.zip -o packages/sendrepute-laravel.zip
unzip packages/sendrepute-laravel.zip -d packages
composer config repositories.sendrepute path ./packages/sendrepute-laravel
composer require sendrepute/laravel:@dev
php artisan vendor:publish --tag=sendrepute-config
Alternative: Installation aus öffentlicher Quelle
Verwenden Sie diesen Quellweg anstelle der oben genannten Download-Anweisungen auf der Website. Die README-Datei des Repositorys erklärt die verbleibenden Aktivierungs- und Konfigurationsschritte; das Erstellen einer ZIP-Datei allein installiert kein Plugin. Für Python fügt der zweite Befehl optionale Django-Unterstützung hinzu. Bewahren Sie Zugangsdaten in Server-Secrets auf und lesen Sie die Sicherheitshinweise, bevor Sie kostenpflichtige Funktionen aktivieren. Nur Node ist auf npm; ein öffentliches GitHub-Repository impliziert keine Veröffentlichung auf WordPress.org, n8n Cloud, Packagist oder PyPI.
composer config repositories.sendrepute vcs https://github.com/sendrepute/sendrepute-laravel
composer require sendrepute/laravel:dev-main
php artisan vendor:publish --tag=sendrepute-config
2. Sicher konfigurieren
Speichern Sie den SENDREPUTE_API_KEY in den Server-Secrets. Die Basis-URL endet auf /api; der Client hängt /v1/classify an. Exaktes Trusted-Host-Matching und verifiziertes HTTPS sind erforderlich. Beide gezeigten Schalter bleiben aus, bis Sie die Preise prüfen und sie explizit auf true setzen. Wählen Sie in config/sendrepute.php mail.mode, mail.spam_probability_threshold und mail.failure_policy unabhängig voneinander aus. Standard ist Advisory mit Erlaubnis bei Fehlern.
SENDREPUTE_API_BASE_URL=https://www.sendrepute.com/api
SENDREPUTE_TRUSTED_HOSTS=www.sendrepute.com
SENDREPUTE_PAID_ANALYSIS_CONSENT=false
SENDREPUTE_MAIL_ENABLED=false
3. Bewusst nutzen
Fügen Sie den exakten Opt-In-Header nur gezielt ausgewählten Mailable-Klassen hinzu, niemals einem globalen Mail-Callback. Sowohl die globalen Schalter als auch der Header pro Nachricht sind für den automatischen Hook erforderlich. Der Header wird vor der Zustellung entfernt. Halten Sie Passwort-Resets und kritische Benachrichtigungen aus dem automatischen Blockieren heraus, außer sie wurden explizit getestet. Eine manuelle Klassifizierung kann stattdessen den Classifier-Contract auflösen und die Zustimmung pro Aufruf erteilen, wie gezeigt.
// Inside your deliberately opted-in Mailable:
public function headers(): \Illuminate\Mail\Mailables\Headers
{
return new \Illuminate\Mail\Mailables\Headers(text: [
'X-SendRepute-Classify' => 'yes',
]);
}
// Or classify manually inside an authenticated, explicitly confirmed action:
function classifyAfterConsent(bool $confirmed, string $subject, string $body): \SendRepute\Laravel\ClassificationResult
{
if (!$confirmed) {
throw new \RuntimeException('Paid consent required');
}
return app(\SendRepute\Laravel\Contracts\Classifier::class)->classify(
sender: 'Example Company',
subject: $subject,
body: $body,
paidAnalysisConsent: true,
);
}
API- und Methodenreferenz
Lösen Sie das Classifier-Interface aus dem Laravel-Container auf. classify(string sender, string subject, string body, ?string model = null, bool paidAnalysisConsent = false) gibt ClassificationResult zurück. Seine öffentlichen Felder sind requestId, model, label, spamProbability, confidence, replayed und chargedMillicents. SendReputeException liefert eine bereinigte Kategorie, den HTTP-Status, den API-Code und die Request-ID. Der automatische Hook ist AnalyzeOutgoingMessage auf MessageSending und seine sichere Diagnose ist ClassificationOutcome. Diese Integration unterstützt ausschließlich Klassifizierung, keine Kontoverwaltung, Zahlungen, Builder oder KI-Rewrite.
Ergebnisse, Fehler und Grenzen
ClassificationResult enthält validierte Ergebnis- und Abrechnungsdaten. Der MessageSending-Hook gibt false zurück, um eine blockierte Nachricht abzubrechen; ein Abbruch ist kein SMTP-Fehler oder ein MessageSent-Ereignis. ClassificationOutcome meldet nur Aktion, Score und bereinigte Fehlermetadaten, niemals den Nachrichteninhalt. Die Failure-Policy deckt fehlerhafte Eingaben/Antworten, Authentifizierung, Guthaben, Ratenbegrenzungen und Transportprobleme ab. Es werden keine Retries oder Queues hinzugefügt. Ein benannter Absender und ein Text- oder HTML-Body (text/plain, text/html) im Arbeitsspeicher sind erforderlich.
Mautic-Entwurfs-Preflight
0.1.0
Zielgruppe sind Mautic 5.x-Installationen auf einem einzelnen Webknoten mit PHP 8.1+ und ext-curl. Mautic 4, Mautic 6 und Multi-Node-Cluster werden nicht unterstützt. Entpacken Sie das SendReputeBundle in Ihr Plugins-Verzeichnis, laden Sie die Plugins neu und leeren Sie den Cache gemäß der beiliegenden README. Konfigurieren Sie die Anmeldedaten und bestätigen Sie explizit den local-flock-Sperrmodus in der Serverumgebung.
Administrator-initiierte, kostenpflichtige Beratungsanalyse nur für gespeicherte Entwürfe. Globales Opt-in, Entitäts-Zugriffsprüfungen, CSRF-Validierung und eine Einmal-Bestätigung schützen jede Anfrage. Es versendet, überschreibt oder blockiert keine E-Mails und bietet keine Durchsetzung zum Sendezeitpunkt. Platzhalter für Empfänger bleiben unersetzt; speichern Sie Editor-Änderungen zuerst.
Mautic-ZIP herunterladen
Öffentliches Quellcode-Repository
Vollständige README und Beispiele
Sicherheitshinweise und bekannte Einschränkungen
1. Installieren
Führen Sie den Befehl aus Ihrem Mautic-Root mit demselben PHP-Benutzer und derselben Umgebung wie die Webanwendung aus, oder extrahieren Sie die ZIP über Ihren Deployment-Prozess, bevor Sie die Plugins neu laden. Erfordert Mautic 5.x, PHP 8.1+, ext-curl und einen einzelnen Linux/POSIX-Webknoten. Mautic 4/6 und Multi-Node-Cluster werden nicht unterstützt; es wird keine Zertifizierung für Live-Patch-by-Patch-Installationen beansprucht.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-mautic.zip
unzip sendrepute-mautic.zip -d plugins
php bin/console mautic:plugins:reload
php bin/console cache:clear
Alternative: Installation aus öffentlicher Quelle
Verwenden Sie diesen Quellweg anstelle der oben genannten Download-Anweisungen auf der Website. Die README-Datei des Repositorys erklärt die verbleibenden Aktivierungs- und Konfigurationsschritte; das Erstellen einer ZIP-Datei allein installiert kein Plugin. Für Python fügt der zweite Befehl optionale Django-Unterstützung hinzu. Bewahren Sie Zugangsdaten in Server-Secrets auf und lesen Sie die Sicherheitshinweise, bevor Sie kostenpflichtige Funktionen aktivieren. Nur Node ist auf npm; ein öffentliches GitHub-Repository impliziert keine Veröffentlichung auf WordPress.org, n8n Cloud, Packagist oder PyPI.
git clone https://github.com/sendrepute/sendrepute-mautic.git
cd sendrepute-mautic
python3 package.py
2. Sicher konfigurieren
Erstellen Sie das gezeigte persistente Ledger-Verzeichnis außerhalb des Web-Roots, das dem PHP-Benutzer gehört und den Modus 0700 hat. Verwenden Sie nicht /tmp, flüchtige Container, Symlinks oder unsicheren Netzwerkspeicher. Speichern Sie den SENDREPUTE_API_KEY serverseitig. Bestätigen Sie local-flock nur, wenn ein einzelner Webknoten das gemeinsam genutzte Process-Locking bereitstellt. Die globale bezahlte Analyse bleibt bei 0 deaktiviert; setzen Sie sie erst nach Prüfung der Preise und Limits auf 1. Kein Browser-Feld darf die Anmeldeinformationen oder den Endpunkt bereitstellen.
SENDREPUTE_MAUTIC_PAID_ANALYSIS_ENABLED=0
SENDREPUTE_MAUTIC_ATOMIC_LOCK_MODE=local-flock
SENDREPUTE_MAUTIC_LEDGER_DIR=/var/lib/mautic/sendrepute-ledger
3. Bewusst nutzen
Speichern Sie zuerst die Änderungen im Editor. Öffnen Sie als echter Mautic-Administrator mit Zugriff auf diese E-Mail den gespeicherten Entwurf und wählen Sie 'SendRepute Preflight'. Überprüfen Sie die Bestätigung und akzeptieren Sie explizit den kostenpflichtigen Vorgang. Die Anfrage benötigt eine CSRF-Validierung und einen zehnminütigen, einmaligen Intent, der an den gespeicherten Inhalt gebunden ist. Persistentes Locking und ein inhaltsfreies Ledger verhindern doppelte gleichzeitige Ausgaben auf dem unterstützten Einzelknoten.
Ergebnisse, Fehler und Grenzen
Zeigt validierte Wahrscheinlichkeit, Label, Konfidenz sowie den tatsächlich abgerechneten Betrag oder die Empfangsbestätigung an. Fehler führen zu keiner Spam-Entscheidung und werden nicht automatisch wiederholt. Nur der gespeicherte Anzeigename des Absenders, der Betreff und der Textkörper werden analysiert; Kontakt-Platzhalter bleiben unersetzt. Das Plugin schreibt keine Entwürfe um, versendet keine E-Mails, blockiert keine Kampagnen und erzwingt keine Sendezeitrichtlinien. Eine Prüfung des gespeicherten Entwurfs kann die endgültige, beim Empfänger gerenderte Nachricht nicht zertifizieren.
Python-Client und Django-Backend
0.1.0
Erfordert Python 3.9+. Entpacken Sie die Quell-ZIP und installieren Sie das Verzeichnis mit pip. Der generische Server-Client nutzt die Standardbibliothek; Django ist eine optionale Abhängigkeit für das explizite E-Mail-Backend. Dieses Paket ist nicht auf PyPI veröffentlicht.
Die kostenpflichtige Zustimmung ist standardmäßig deaktiviert. Der Django-Wrapper behält die ursprünglichen Transport- und Nachrichtenobjekte bei. Er analysiert eine begrenzte Zeichenfolge, die den primären Textkörper sowie integrierte text/plain- und text/html-Alternativen kombiniert, keine Anhänge. Der Blockierungsmodus weist nicht unterstützte oder zu große angezeigte Inhalte ab. Authentifizierungsfehler blockieren standardmäßig selbst bei einer Zulassungsrichtlinie; wählen Sie das Verhalten für critical-mail bewusst aus.
Python-Quell-ZIP herunterladen
Öffentliches Quellcode-Repository
Vollständige README und Beispiele
Sicherheitshinweise und bekannte Einschränkungen
1. Installieren
Verwenden Sie eine virtuelle Umgebung. Der generische Client beschränkt sich auf die Standardbibliothek; der letzte Befehl fügt die optionale Django-Abhängigkeit hinzu und ist für die Verwendung mit Flask, FastAPI oder anderen generischen Servern nicht erforderlich. Das Paket wird aus dem heruntergeladenen Quellverzeichnis installiert, nicht von PyPI. Python 3.9+ ist die Mindestanforderung für das Paket; wählen Sie Python/Django-Versionen, die gemeinsam unterstützt werden.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-python.zip
unzip sendrepute-python.zip
python -m venv .venv
. .venv/bin/activate
python -m pip install ./sendrepute-python
python -m pip install './sendrepute-python[django]'
Alternative: Installation aus öffentlicher Quelle
Verwenden Sie diesen Quellweg anstelle der oben genannten Download-Anweisungen auf der Website. Die README-Datei des Repositorys erklärt die verbleibenden Aktivierungs- und Konfigurationsschritte; das Erstellen einer ZIP-Datei allein installiert kein Plugin. Für Python fügt der zweite Befehl optionale Django-Unterstützung hinzu. Bewahren Sie Zugangsdaten in Server-Secrets auf und lesen Sie die Sicherheitshinweise, bevor Sie kostenpflichtige Funktionen aktivieren. Nur Node ist auf npm; ein öffentliches GitHub-Repository impliziert keine Veröffentlichung auf WordPress.org, n8n Cloud, Packagist oder PyPI.
python -m pip install "sendrepute @ git+https://github.com/sendrepute/sendrepute-python.git@7d54935c4ae2db136800231136e4ea28d63118db"
python -m pip install "sendrepute[django] @ git+https://github.com/sendrepute/sendrepute-python.git@7d54935c4ae2db136800231136e4ea28d63118db"
2. Sicher konfigurieren
Injizieren Sie den SENDREPUTE_API_KEY über Server-Secrets. Der generische Client verwendet standardmäßig den kanonischen gehosteten Endpunkt, verifiziertes HTTPS, keine Weiterleitungen und keine Wiederholungsversuche. Die Client-Zustimmung ist standardmäßig deaktiviert; das Beispiel erteilt die Zustimmung pro Aufruf erst nach einer Bestätigung. Endpunkt-Überschreibungen erfordern eine explizite HTTPS-Origin-Allowlist. Das zurückgegebene Dictionary enthält validierte Ergebnis- und Abrechnungsdaten, keine Sendeentscheidung.
import os
from sendrepute import SendReputeClient, SendReputeError
client = SendReputeClient(api_key=os.environ["SENDREPUTE_API_KEY"])
def classify_after_consent(sender, subject, body, confirmed=False):
if confirmed is not True:
raise ValueError("Paid consent required")
try:
return client.classify(
sender=sender, subject=subject, body=body,
paid_analysis_consent=True,
)
except SendReputeError as error:
# Safe metadata only; do not log message content or response bodies.
print(error.code, error.status, error.request_id)
raise
Django E-Mail-Backend
Bewahren Sie Ihr bestehendes Backend in SENDREPUTE_ORIGINAL_EMAIL_BACKEND auf und behalten Sie dessen normale SMTP-Einstellungen bei. Das Beispiel belässt die kostenpflichtige Zustimmung auf deaktiviert; setzen Sie diese erst nach Prüfung der Preisgestaltung auf True. Der Beratungsmodus lässt erfolgreiche Analysen zu; die Blockierung erfolgt durch Vergleich mit dem SENDREPUTE_SPAM_THRESHOLD. Wählen Sie die Richtlinie für unabhängige Fehler bewusst aus. Authentifizierungsfehler blockieren standardmäßig, selbst unter einer Allow-Regel. Das Beispiel folgt den README-Standards und ist keine Empfehlung für ein Fail-Open bei kritischen E-Mails.
# Django settings.py
import os
EMAIL_BACKEND = "sendrepute.django.SendReputeEmailBackend"
SENDREPUTE_ORIGINAL_EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
SENDREPUTE_API_KEY = os.environ["SENDREPUTE_API_KEY"]
SENDREPUTE_PAID_ANALYSIS_CONSENT = False
SENDREPUTE_POLICY_MODE = "advisory"
SENDREPUTE_SPAM_THRESHOLD = 0.90
SENDREPUTE_FAILURE_POLICY = "allow"
SENDREPUTE_ALLOW_AUTH_FAILURE = False
SENDREPUTE_TIMEOUT = 10
3. Bewusst nutzen
Diese Funktion sendet nur, wenn sie aufgerufen wird. Wenn der Django-Wrapper konfiguriert und die kostenpflichtige Zustimmung aktiviert ist, erhält das ursprüngliche Backend die ursprünglichen Nachrichtenobjekte unverändert. Der Klassifikator erhält einen begrenzten String, der den Haupttext mit den Inline-Alternativen text/plain und text/html kombiniert; Anhänge und Empfänger sind keine separaten Eingaben. Rendern Sie Templates vor dem Aufruf. Verwenden Sie zuerst ein lokales Test-Backend und dann Ihren bewusst konfigurierten echten Transport.
from django.core.mail import EmailMultiAlternatives
def send_reviewed_message(recipient):
message = EmailMultiAlternatives(
subject="Your requested summary",
body="Here is the summary you requested.",
from_email="Example Team <team@example.com>",
to=[recipient],
)
message.attach_alternative(
"<p>Here is the summary you requested.</p>", "text/html"
)
return message.send()
API- und Methodenreferenz
Der öffentliche Konstruktor ist SendReputeClient(api_key, endpoint, allowed_origins, timeout, paid_analysis_consent), wobei alle außer api_key als Keyword-Argumente übergeben werden. timeout muss größer als Null und höchstens 30 Sekunden sein. classify erfordert die Keywords sender, subject und body; model und das pro Aufruf geltende paid_analysis_consent sind optional. sender umfasst 1–320 Zeichen, subject 1–998 und body 1–524.288, wobei ein separates Limit für die kodierte Anfrage gilt. Das zurückgegebene Dict enthält requestId, model, result und billing; result beinhaltet label, spamProbability, confidence, reasons und optional contentAudit. billing enthält chargedMillicents und replayed. Zu den Fehlern gehören ConsentRequiredError, AuthenticationError, BalanceError, RateLimitError, TransportError und InvalidResponseError, alle unter SendReputeError. Eine ungültige Konfiguration kann einen ValueError auslösen. Das Django-Backend macht open(), close() und send_messages(email_messages) verfügbar und gibt die Sendeanzahl des ursprünglichen Backends zurück; es fügt keine generischen API-, Builder-, Rewrite- oder Zahlungsmethoden hinzu.
Ergebnisse, Fehler und Grenzen
Blocking lehnt nicht unterstützte oder zu große angezeigte Inhalte ab, anstatt nur eine sicherere Teilmenge zu analysieren. Authentifizierungsfehler erfordern eine separate explizite Überschreibung, um zulässig zu sein. Andere Fehler folgen der gewählten allow/block-Policy; fail_silently steuert, ob blockierte Fehler ausgelöst oder übersprungen werden. Der Wrapper führt kein Queuing, keine Retries, keinen Transportwechsel, keine Prüfung von Anhängen oder Template-Rendering durch. Der generische Client löst bereinigte SendReputeError-Unterklassen mit errorCode/status/request_id aus; Protokollieren Sie keine Nachrichten-Inhalte.
Go-Klassifizierungs-Client
0.1.0
Erfordert Go 1.22+. Der reine Standard-Library-Client unterstützt die Klassifizierung, jedoch keinen E-Mail-Transport. Wählen Sie das herunterladbare Quellcode-ZIP mit einem lokalen Modul-Ersatz oder die verifizierte öffentliche Modulinstallation, die unter der Quellcode-Alternative angezeigt wird.
Serverseitige Klassifizierung nur mit Standardbibliothek, expliziter kostenpflichtiger Zustimmung, begrenzten Anfragen, verifiziertem HTTPS, abgelehnten Weiterleitungen und ohne Wiederholungsversuche. Es versendet keine E-Mails und trifft keine Sende-/Blockentscheidungen. Ihre Anwendung muss Schwellenwerte und Fehlerverhalten bewusst wählen, insbesondere für kritische transaktionale E-Mails.
Go-Quell-ZIP herunterladen
Öffentliches Quellcode-Repository
Vollständige README und Beispiele
Sicherheitshinweise und bekannte Einschränkungen
1. Installieren
Extrahieren Sie den Quellcode in das Verzeichnis Ihrer bestehenden Go-Anwendung und führen Sie dort die Modulbefehle aus. Der lokale Ersatz verweist auf das heruntergeladene Modul; verschieben oder passen Sie diesen Pfad an, falls sich Ihr Projektlayout unterscheidet. Führen Sie go mod init mit Ihrem eigenen Modulnamen erst dann aus, wenn Sie eine neue Anwendung erstellen. Dieser Client benötigt keine externen Laufzeitmodule.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-go.zip
unzip sendrepute-go.zip
# Run inside your existing application's module:
go mod edit -require=github.com/sendrepute/sendrepute-go@v0.0.0
go mod edit -replace=github.com/sendrepute/sendrepute-go=./sendrepute-go-v0.1.0
go mod tidy
Alternative: Installation aus öffentlicher Quelle
Verwenden Sie diesen Quellweg anstelle der oben genannten Download-Anweisungen auf der Website. Die README-Datei des Repositorys erklärt die verbleibenden Aktivierungs- und Konfigurationsschritte; das Erstellen einer ZIP-Datei allein installiert kein Plugin. Für Python fügt der zweite Befehl optionale Django-Unterstützung hinzu. Bewahren Sie Zugangsdaten in Server-Secrets auf und lesen Sie die Sicherheitshinweise, bevor Sie kostenpflichtige Funktionen aktivieren. Nur Node ist auf npm; ein öffentliches GitHub-Repository impliziert keine Veröffentlichung auf WordPress.org, n8n Cloud, Packagist oder PyPI.
go get github.com/sendrepute/sendrepute-go@bfd656f829618348232da506225a5d92587d48e2
2. Sicher konfigurieren
Injizieren Sie den SENDREPUTE_API_KEY aus den Server-Secrets. Die gezeigte Funktion führt keine Arbeit aus, bis sie mit confirmed=true aufgerufen wird; dieser Aufruf kann eine kostenpflichtige Klassifizierung auslösen. Sie setzt einen zehnsekündigen Kontext und verwendet den kanonischen HTTPS-Endpunkt. Die Client-Zustimmung ist standardmäßig deaktiviert; das letzte true-Argument erteilt die Zustimmung für diese eine Anfrage. Eine Endpunkt-Überschreibung erfordert einen expliziten AllowedOrigins-Eintrag; Weiterleitungen werden abgelehnt.
package integration
import (
"context"
"errors"
"os"
"time"
sendrepute "github.com/sendrepute/sendrepute-go"
)
func Analyze(subject, body string, confirmed bool) error {
if !confirmed {
return errors.New("paid consent required")
}
client, err := sendrepute.NewClient(sendrepute.Config{
APIKey: os.Getenv("SENDREPUTE_API_KEY"),
})
if err != nil {
return err
}
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
result, err := client.Classify(ctx, sendrepute.ClassificationInput{
Sender: "Example Team", Subject: subject, Body: body,
}, true)
if err != nil {
return err
}
if result.Result.SpamProbability >= 0.90 {
return errors.New("review required")
}
return nil
}
3. Bewusst nutzen
Rufen Sie Analyze aus Ihrer authentifizierten Anwendung erst nach Prüfung der Preisgestaltung und expliziter Zustimmung auf. Der Schwellenwert von 0.90 und der Review-Fehler sind Beispiele für Anwendungsrichtlinien, keine SDK-Standardwerte. Entscheiden Sie, ob Fehler ein Aufschieben, Zulassen oder Schließen bedeuten, bevor Sie jeglichen Sende-Code anbinden. Der Client gibt ein typisiertes Ergebnis mit Result.SpamProbability und Abrechnungsfeldern zurück; er versendet niemals selbst E-Mails oder trifft Zustellentscheidungen.
API- und Methodenreferenz
NewClient(Config) gibt (*Client, error) zurück. Config akzeptiert APIKey, Endpoint, AllowedOrigins, Timeout und PaidAnalysisConsent. Classify(ctx, ClassificationInput, consent) gibt (*ClassificationResponse, error) zurück. Die Input-Felder sind Sender, Subject, Body und optional Model. Sender umfasst 1–320 Runen, Subject 1–998 Runen und Body höchstens 524.288 UTF-8-Bytes. Die typisierte Antwort enthält RequestID, Model, Result und Billing; Billing legt ChargedMillicents und Replayed offen. Result beinhaltet Label, SpamProbability, Confidence, Reasons, FlaggedTerms und optional ContentAudit. Verwenden Sie errors.As, um *Error sicher zu prüfen; Konfigurations- und API-Fehler bleiben Fehler, keine Spam-Scores. Es existieren keine Account-, Zahlungs-, Builder- oder Rewrite-Methoden.
Ergebnisse, Fehler und Grenzen
Ein Aufruf führt höchstens einen kostenpflichtigen HTTP-Versuch ohne Wiederholungen aus. Fehler legen eine sichere Kategorie, eingeschränkten Code/Request-ID und Status offen, niemals Anmeldedaten, Texte oder Netzwerkdetails. Kontextdauer, Anfrage- und Antwortgrößen sind begrenzt; fehlerhafte Antworten werden abgelehnt, anstatt in Scores umgewandelt zu werden. Der Client verfügt über keine Funktionen für MIME-Parsing, Rendering, Empfänger, Anhänge, Warteschlangen, Builder, Umschreiben oder SMTP. Wählen Sie das Modell nur bei Bedarf explizit aus; andernfalls gilt der Kontostandard.
listmonk HTTP Messenger
0.1.0
Ein unveröffentlichtes lokales Quellpaket für Node.js 20+, das auf die Custom HTTP Messenger-Schnittstelle von listmonk 6.2.0 abzielt. Dieser externe Dienst übernimmt die Downstream-SMTP-Zustellung nach der Klassifizierung; es handelt sich nicht um ein In-Process-Plugin oder einen SMTP-Preflight-Proxy. Die Verifizierung erfolgt isoliert und offline, nicht über eine installierte listmonk-Bereitstellung oder einen echten SMTP-Provider-Test.
Beide bezahlten Schalter sind standardmäßig deaktiviert. Der Messenger akzeptiert einen vollständig gerenderten Body, lehnt Anhänge ab, prüft aktuelle Preise und erfordert das strikte Inbox-Ergebnis: Label inbox, spamProbability höchstens 0.12 und null flaggedTerms. Anschließend erstellt und sendet er denselben geprüften Body über die konfigurierte SMTP-Verbindung. Dauerhafte Belege verhindern automatische Wiederholungen nach blockierten, fehlgeschlagenen, laufenden oder unsicheren Ergebnissen.
Unveröffentlichte listmonk-Quell-ZIP herunterladen
1. Installieren
Entpacken Sie diese unveröffentlichte Website-Quell-ZIP auf dem dedizierten Messenger-Host. Überprüfen Sie die README.md und SECURITY.md, kopieren Sie die Beispielumgebung und führen Sie einen Syntax-Check des Server-Einstiegspunkts vor der Konfiguration durch. Das herunterladbare, auf der Whitelist stehende Artefakt schließt die Repository-Testsuite absichtlich aus. Es gibt keine Laufzeitpakete von Drittanbietern. Dies ist keine Installation über den listmonk-Marketplace oder eine In-Prozess-Installation.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-listmonk.zip
unzip sendrepute-listmonk.zip
cd sendrepute-listmonk
cp config.example.env .env
node --check src/server.mjs
2. Sicher konfigurieren
Verwenden Sie ein dediziertes, nicht privilegiertes Konto und ein dauerhaftes lokales Zustandsverzeichnis mit dem Modus 0700. Lassen Sie alle drei gezeigten Sicherheitsschalter auf false, bis die Preise und die nicht-atomare Preisbeschränkung akzeptiert wurden. Speichern Sie SendRepute, Messenger Basic Auth und Downstream-SMTP-Zugangsdaten nur in Server-Secrets. Terminieren Sie HTTPS an einem vertrauenswürdigen Reverse Proxy.
SENDREPUTE_ENABLED=false
SENDREPUTE_PAID_CONSENT=false
SENDREPUTE_ALLOW_NONATOMIC_PRICE_CONFIRMATION=false
SENDREPUTE_CONFIRMED_MAX_PRICE_MILLICENTS=
STATE_DIRECTORY=/var/lib/sendrepute-listmonk
SMTP_HOST=smtp.example.com
SMTP_PORT=465
SMTP_SECURE=true
3. Bewusst nutzen
Stellen Sie nur POST /v1/listmonk hinter HTTPS und einer dedizierten Basic Auth bereit. Fügen Sie unter listmonk Settings > Messengers die URL als Custom HTTP Messenger hinzu, wählen Sie null Wiederholungsversuche und wählen Sie diesen nur für Kampagnen aus, die geprüft und zugestellt werden sollen. Wählen Sie nicht zusätzlich listmonk SMTP aus: Dieser Dienst führt den nachgelagerten SMTP-Versand selbst durch.
Custom HTTP Messenger URL: https://messenger.example.com/v1/listmonk
Authentication: dedicated Basic Auth username and password
Retries: 0
Select this messenger only. Do not also select SMTP for the campaign.
Ergebnisse, Fehler und Grenzen
Ein zugestelltes Duplikat gibt einen Erfolg zurück, ohne eine weitere Klassifizierung oder einen Versand auszulösen. Jede blockierte, fehlgeschlagene, prüfende, sendende oder unsichere Quittung verweigert einen erneuten Versand. Gleichen Sie nach einem unsicheren SMTP-Ergebnis die Provider-Logs und den listmonk-Kontext manuell ab; löschen Sie niemals eine Quittung, nur um einen erneuten Versuch zu erzwingen. Die aktuelle Preisprüfung ist aktuell, aber nicht atomar, da die Klassifizierung kein expectedPriceMillicents-Feld akzeptiert.
Mailcoach Self-Hosted-Adapter
0.1.0
Ein unveröffentlichtes lokales Composer-Paket für Mailcoach Self-Hosted v10 auf Laravel 12. Da der lizenzierte spatie/laravel-mailcoach v10-Kern in diesem Workspace nicht verfügbar ist, beansprucht dieses Paket keinen installierten Mailcoach v10-End-to-End-Test. Echte Laravel 12 Mailer-Tests decken das dokumentierte abbrechbare MessageSending-Ereignis ab; ein Lizenzinhaber muss jeden exakten Mailcoach-Versandpfad vor der Produktion verifizieren.
Die Schalter für Aktivierung, kostenpflichtige Zustimmung und Anerkennung der aktuellen Preise sind standardmäßig deaktiviert. Sobald aktiviert, wird der Hook auf jede Nachricht über diesen Laravel-Mailer angewendet, nicht nur auf Routen mit dem Namen Mailcoach. Er analysiert die bereits gerenderten Symfony Email-Alternativen und kann den Transport abbrechen. Fail-Closed ist der Standard; das Zulassen von Analysefehlern ist eine separate, bewusste Richtlinie.
Experimentellen Mailcoach-Quellcode als ZIP herunterladen
1. Installieren
Legen Sie die heruntergeladene, unveröffentlichte ZIP-Datei in ein privates Composer-Artefaktverzeichnis, auf das die lizenzierte Mailcoach-Anwendung zugreifen kann. Registrieren Sie dieses lokale Artefakt-Repository, fordern Sie die 0.1-Linie an, committen Sie die konsumierende Lock-Datei und veröffentlichen Sie optional die Konfiguration. Dies ist keine Packagist-Installation. Ein Lizenzinhaber muss die Verifizierung gegen das exakte Mailcoach Self-Hosted v10-Release durchführen.
mkdir -p packages
curl -fL https://www.sendrepute.com/downloads/sendrepute-mailcoach.zip -o packages/sendrepute-mailcoach.zip
composer config repositories.sendrepute artifact packages
composer require sendrepute/mailcoach:^0.1
php artisan vendor:publish --tag=sendrepute-mailcoach-config
2. Sicher konfigurieren
Lassen Sie zunächst alle drei Schalter deaktiviert. Speichern Sie den api_key in den Server-Geheimnissen und konfigurieren Sie ein kontoseitiges Ausgabenlimit. Die aktuelle Analyse-Operation verfügt über keinen atomaren expectedPriceMillicents-Schutz, daher akzeptiert der dritte Schalter explizit die aktuellen API-Preise, anstatt ein festes Angebot zu garantieren. Konfigurieren Sie den Schwellenwert und die Failure-Policy für Erlauben/Blockieren unabhängig voneinander.
SENDREPUTE_MAILCOACH_ENABLED=false
SENDREPUTE_MAILCOACH_PAID_CONSENT=false
SENDREPUTE_MAILCOACH_ACCEPT_CURRENT_API_PRICING=false
SENDREPUTE_API_BASE_URL=https://www.sendrepute.com/api
3. Bewusst nutzen
Die Paket-Erkennung registriert einen Laravel MessageSending-Listener. Es erfolgt kein kampagnenspezifischer Aufruf im Anwendungscode: Wenn die Funktion in einer dedizierten Mailcoach-Installation gezielt aktiviert ist, prüft sie jede über diesen Laravel-Mailer gesendete Symfony Email unmittelbar vor dem Transport. In einer gemischten Laravel-Anwendung wird die E-Mail der Host-Anwendung ebenfalls abgedeckt.
Ergebnisse, Fehler und Grenzen
Der Adapter übermittelt den Absender-Anzeigenamen, den Betreff sowie jede nicht leere in-memory text/plain- oder text/html-Alternative, schließt jedoch Empfänger, Adressen, Anhänge, Umschlagdaten und Raw-MIME aus. Fehlender oder nicht unterstützter Inhalt, fehlerhafte Antworten und API-Fehler blockieren standardmäßig. Offline-Kern-Tests prüfen die echte Laravel Mailer-Stornierung, aber lizensierte Routen für Mailcoach-Kampagnen, Automatisierungen, Transaktionen und Testnachrichten bleiben not verified.
Brevo-gesteuerter Sendefluss
0.1.0
Ein unveröffentlichtes lokales Node.js 20+ Quellpaket, das eine explizite serverseitige Sende-API um die transaktionale Brevo POST /v3/smtp/email Operation implementiert. Es fängt keine Brevo Dashboard-Versendungen, Kampagnen, Automatisierungen, SMTP-Relays oder Aufrufe über andere SDKs ab. Tests sind kontrolliert und offline; sie zertifizieren kein Live-Brevo-Konto.
Die kostenpflichtige Zustimmung ist standardmäßig deaktiviert. Nur feste Inline-Text- und HTML-Nachrichten werden akzeptiert; remoteTemplates, Parameter, geplante Versendungen, Nachrichtenversionen und URL-basierte Inhalte werden abgelehnt. Der exakte unveränderliche geprüfte snapshot wird an Brevo gesendet. Ein dauerhaftes sendKey-Hauptbuch blockiert doppelte und mehrdeutige Versuche, und unsichere Provider-Ergebnisse erfordern einen manuellen Abgleich durch den Betreiber.
Unveröffentlichte Brevo Quell-ZIP herunterladen
1. Installieren
Entpacken Sie die unveröffentlichte Quell-ZIP in eine Serveranwendung, überprüfen Sie deren README und Sicherheitshinweise und führen Sie einen Syntax-Check von src/index.mjs durch. Das herunterladbare, auf der Whitelist stehende Artefakt schließt die Repository-Testsuite absichtlich aus. Importieren Sie SendReputeBrevo aus src/index.mjs; dies ist keine Installation über npm oder den Brevo-Marketplace. Node.js 20+ ist erforderlich und es gibt keine Laufzeitabhängigkeiten.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-brevo.zip
unzip sendrepute-brevo.zip
cd sendrepute-brevo
node --check src/index.mjs
2. Sicher konfigurieren
Belassen Sie paidConsent auf false, bis die aktuellen Preise und die nicht-atomare Preisbeschränkung akzeptiert wurden. Bewahren Sie beide API-Schlüssel in den Server-Secrets auf und verwenden Sie ein privates, persistentes Ledger-Verzeichnis auf einem dauerhaften Single-Host-Speicher. expectedPriceMillicents muss dem aktuell abgerufenen Maximum entsprechen, aber das classify-Lastschriftverfahren kann diesen Wert noch nicht atomar erzwingen.
const integration = new SendReputeBrevo({
sendreputeApiKey: process.env.SENDREPUTE_API_KEY,
brevoApiKey: process.env.BREVO_API_KEY,
paidConsent: false,
expectedPriceMillicents: approvedMaximum,
ledgerDirectory: "/var/lib/my-app/sendrepute-brevo",
});
3. Bewusst nutzen
Rufen Sie send(...) nur über den kontrollierten Serverpfad auf, der sowohl klassifizieren als auch zustellen soll. Verwenden Sie für jeden Versuch derselben beabsichtigten E-Mail denselben stabilen sendKey wieder. Geben Sie festen Inline-Inhalt an; geben Sie keine Brevo-Template-IDs, veränderliche Parameter, Zeitplanungen oder Nachrichtenversionen an. Sendevorgänge an anderer Stelle umgehen diesen Wrapper vollständig.
await integration.send({
sendKey: durableBusinessEventId,
message: {
sender: { name: "Example Shop", email: "orders@example.com" },
to: [{ email: recipient }],
subject,
textContent,
htmlContent,
},
});
Ergebnisse, Fehler und Grenzen
Ein Inbox-Ergebnis innerhalb des Schwellenwerts erlaubt eine Brevo transaktionale API-Anfrage für denselben unveränderlichen snapshot. Das Ledger wechselt vor dem Provider-Versand zu delivery-unknown. Timeouts, Verbindungsabbrüche, fehlgeformte Erfolgsmeldungen, Abstürze und Provider-Ablehnungen werden niemals automatisch wiederholt; gleichen Sie diese vor jeder manuellen Entscheidung mit den Brevo-Aufzeichnungen ab.
BigMailer gesteuerter Sendevorgang
0.1.0
Ein unveröffentlichter lokaler Node.js 24+ Wrapper für explizite BigMailer Transactional API-Aufrufe. Er installiert sich nicht in BigMailer und fängt keine Dashboard- oder nicht zugehörigen API-Sendevorgänge ab. Da BigMailer Eigentümer der remote editierbaren Kampagneninhalte ist, kann der Wrapper nicht beweisen, dass die Kampagne zwischen Prüfung und Zustellung identisch mit dem vom Aufrufer bereitgestellten render snapshot geblieben ist.
Aktivierung, kostenpflichtige Zustimmung und Anerkennung der Einschränkung von Remote-Vorlagen sind standardmäßig deaktiviert. Der Aufrufer muss einen vollständigen render snapshot bereitstellen und hashen, die zugehörige Remote-Kampagne operativ sperren und einen dauerhaften deliveryKey angeben. Die Preisgestaltung wird vor der Klassifizierung erneut geprüft, jedoch verfügt die aktuelle Klassifizierungs-API über kein atomares expectedPriceMillicents-Feld. Duplikate, blockierte, abgelehnte und mehrdeutige Zustellungszustände führen niemals zu einem automatischen erneuten Senden.
Experimentelle BigMailer-Quellcode-ZIP herunterladen
1. Installieren
Extrahieren Sie diese unveröffentlichte Quell-ZIP in die kontrollierte Node.js 24+ Server-Anwendung und lesen Sie die README.md und SECURITY.md. Importieren Sie den Wrapper und FileDeliveryStore direkt aus src. Dies ist keine npm- oder BigMailer-Marketplace-Installation und weist keine Laufzeitabhängigkeiten von Drittanbietern auf.
curl -fLO https://www.sendrepute.com/downloads/sendrepute-bigmailer.zip
unzip sendrepute-bigmailer.zip
cd sendrepute-bigmailer
node --check src/index.mjs
node --check src/file-delivery-store.mjs
2. Sicher konfigurieren
Lassen Sie enabled, paidConsent und remoteTemplateSnapshotLimitationAcknowledged bis zur Überprüfung auf false. Speichern Sie API-Keys, Brand- und Kampagnen-UUIDs nur serverseitig. Legen Sie den FileDeliveryStore auf privatem, dauerhaftem Speicher ab. Kopieren Sie die frisch geprüften Preise in expectedPricing, mit dem Verständnis, dass die aktuelle classify API diese nicht atomar sperren kann.
const integration = createBigMailerIntegration({
enabled: false,
paidConsent: false,
remoteTemplateSnapshotLimitationAcknowledged: false,
sendReputeApiKey: process.env.SENDREPUTE_API_KEY,
bigMailerApiKey: process.env.BIGMAILER_API_KEY,
brandId,
campaignId,
expectedPricing,
deliveryStore: new FileDeliveryStore("/var/lib/my-app/bigmailer-deliveries.json"),
});
3. Bewusst nutzen
Stellen Sie für jeden kontrollierten API-Versand eine stabile deliveryKey, alle angezeigten Alternativen in text/plain und text/html, den exakten Render-Snapshot sowie den snapshotDigest(snapshot) bereit. Bestätigen Sie die remote-template limitation nur dann, wenn eine betriebliche Kontrolle die BigMailer Kampagnen-Revision einfriert, die diesem Snapshot entspricht. Dashboard-Aktivitäten und nicht damit verbundene API-Sendevorgänge umgehen diesen Wrapper.
await integration.send({
deliveryKey: durableBusinessEventId,
snapshot,
snapshotSha256: snapshotDigest(snapshot),
email: recipient,
variables,
});
Ergebnisse, Fehler und Grenzen
Der FileDeliveryStore reserviert den deliveryKey vor der Klassifizierung. Ergebnisse wie Duplikate, Konflikte, Blockierungen, Ablehnungen und mehrdeutige Zustellungsergebnisse können nicht automatisch erneut gesendet werden. Da der Sende-Endpunkt von BigMailer Merge-Daten anstelle des geprüften Bodys akzeptiert, ist eine erfolgreiche Klassifizierung kein Beweis dafür, dass veränderliche remote Kampagneninhalte noch übereinstimmen; verwenden Sie einen anderen Anbieter, wenn eine exakte Kopplung erforderlich ist.
Datenschutz und kostenpflichtige Vorgänge
Die Analyse sendet den Absender-Anzeigenamen, den Betreff und den Nachrichtentext an SendRepute. Empfänger und Anhänge werden nicht separat übertragen, jedoch werden im Text enthaltene Inhalte übertragen. Halten Sie Zugangsdaten geheim und deaktivieren Sie das Logging von Requests/Bodys. Keine Garantie für Posteingangsplatzierung oder Zustellung.
Die Klassifizierung ist kostenpflichtig. Lesen Sie die aktuellen Preise und die Ausgabengrenzen Ihres Kontos, bevor Sie Ihre Zustimmung geben. Eine identische Anfrage für Konto/Inhalt/Modell kann innerhalb von 24 Stunden einen Beleg wiederholen; geänderte Inhalte oder Modelle können eine neue Gebühr verursachen. Gehen Sie nicht davon aus, dass ein erneuter Versuch kostenlos ist. Das KI-Umschreiben erfordert vor der kostenpflichtigen Übermittlung ein Angebot über die Höchstgebühr für den ausgewählten übergeordneten Beleg, Modus und die Bedingungen; rufen Sie einen laufenden Beleg ab und stellen Sie abgeschlossene Ergebnisse mit der ursprünglichen Anfrage-ID wieder her, anstatt eine weitere Anfrage zu starten. 'Alles umschreiben' kann einen exakten finalen gerenderten Entwurf ohne erneute Belastung verifizieren. Die KI-Vorlagen-Generierung und der native VIP-Zugang werden separat berechnet; die Standard-Builder-Verarbeitung ist kostenlos. Kein Analyse-, Umschreib- oder Builder-Ergebnis garantiert die Zustellung, die Posteingangsplatzierung oder die Compliance.
Die Offline-Validierung ist keine Zertifizierung jeder Framework-, Plugin- oder Transport-Version. Lesen Sie die enthaltenen Installations- und Sicherheitshinweise, lassen Sie kostenpflichtige Analysen deaktiviert, bis diese bewusst konfiguriert wurden, und testen Sie Ihre gewählte Fehlerrichtlinie, bevor Sie diese für kritische E-Mails aktivieren.
Preise überprüfen
Kunden-API-Referenz
Integrations-Support anfragen