Formularprüfung

Dokumentation

Diese Dokumentation führt dich Schritt für Schritt durch die serverseitige Formularprüfung per API. Du siehst den Request-Aufbau, das Antwortformat und direkte Beispiele für die Einbindung in eigene Projekte.

Die API prüft Formulardaten über den Scan-Endpoint. Du sendest die Felder `sender`, `recipient`, `subject` und `message` zusammen mit den drei X-Spam-Headern.

Request-Daten

Sende jede Formularübermittlung serverseitig an den Scan-Endpoint. Die Bewertung erfolgt anhand von Inhalt, Treffern und Absenderdaten.

Feld Pflicht Beschreibung
sender Ja E-Mail-Adresse des Absenders.
recipient Ja Zieladresse oder Postfach des Formulars.
subject Ja Betreff der Anfrage.
message Ja Nachrichtentext bzw. Formularinhalt.

Antwortdaten

Die API liefert den Spam-Score, das Ergebnis und die Trefferliste zurück. Bei `verdict = blocked` solltest du die Formularverarbeitung stoppen.

  • code, verdict, score, threshold
  • matched_keywords, message_id, note

PHP-Beispiel

Beispiel mit Laravel Http Client. Verwende es in einem Controller oder Service vor dem Versand der E-Mail.

Einfügen in: app/Http/Controllers/ContactController.php (oder eigener Service unter app/Services/SpamCheckService.php)



use Illuminate\Support\Facades\Http;

$response = Http::timeout(10)
    ->acceptJson()
    ->withHeaders([
        'X-Spam-Username' => 'dein-benutzername',
        'X-Spam-Password' => 'dein-passwort',
        'X-Spam-ApiKey' => 'dein-api-key',
    ])
    ->post('https://antispam.example.com/api/v1/scan', [
        'sender' => 'info@example.com',
        'recipient' => 'kontakt@example.com',
        'subject' => 'Anfrage über das Kontaktformular',
        'message' => 'Hallo, ich interessiere mich für Ihr Angebot.',
    ]);

if ($response->json('verdict') === 'blocked') {
    // Spam erkannt: Formular nicht weiterverarbeiten.
}

JavaScript-Beispiel

Beispiel für ein eigenes Frontend oder eine SPA. Die Prüfung sollte trotzdem serverseitig abgesichert werden.

Einfügen in: resources/js/app.js (oder in deine Frontend-Komponente)

const response = await fetch('https://antispam.example.com/api/v1/scan', {
  method: 'POST',
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json',
    'X-Spam-Username': 'dein-benutzername',
    'X-Spam-Password': 'dein-passwort',
    'X-Spam-ApiKey': 'dein-api-key',
  },
  body: JSON.stringify({
    sender: 'info@example.com',
    recipient: 'kontakt@example.com',
    subject: 'Anfrage über das Kontaktformular',
    message: 'Hallo, ich interessiere mich für Ihr Angebot.',
  }),
});

const result = await response.json();

if (result.verdict === 'blocked') {
  // Nachricht als Spam behandeln.
}

cURL-Beispiel

Praktisch für Tests, Postman-ähnliche Workflows oder direkte Integrationen.

Ausführen in: Terminal / Shell

curl -X POST "https://antispam.example.com/api/v1/scan" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "X-Spam-Username: dein-benutzername" \
  -H "X-Spam-Password: dein-passwort" \
  -H "X-Spam-ApiKey: dein-api-key" \
  -d '{
    "sender": "info@example.com",
    "recipient": "kontakt@example.com",
    "subject": "Anfrage über das Kontaktformular",
    "message": "Hallo, ich interessiere mich für Ihr Angebot."
  }'

WordPress: Contact Form 7

Beispiel, wie du die Formularübermittlung prüfst und bei erkanntem Spam das Senden der Mail verhinderst.

Einfügen in: wp-content/themes/DEIN-CHILD-THEME/functions.php (alternativ eigenes Plugin)



add_action('wpcf7_before_send_mail', function ($contact_form) {
    $submission = WPCF7_Submission::get_instance();

    if (! $submission) {
        return;
    }

    $data = $submission->get_posted_data();

    $response = wp_remote_post('https://antispam.example.com/api/v1/scan', [
        'timeout' => 10,
        'headers' => [
            'Accept' => 'application/json',
            'Content-Type' => 'application/json',
            'X-Spam-Username' => 'dein-benutzername',
            'X-Spam-Password' => 'dein-passwort',
            'X-Spam-ApiKey' => 'dein-api-key',
        ],
        'body' => wp_json_encode([
            'sender' => sanitize_email($data['your-email'] ?? ''),
            'recipient' => get_option('admin_email'),
            'subject' => sprintf('Kontaktformular #%d', (int) $contact_form->id()),
            'message' => sanitize_textarea_field($data['your-message'] ?? ''),
        ]),
    ]);

    if (is_wp_error($response)) {
        return;
    }

    $result = json_decode(wp_remote_retrieve_body($response), true);

    if (($result['verdict'] ?? '') === 'blocked') {
        add_filter('wpcf7_skip_mail', '__return_true');
    }
});

WordPress: WPForms

Beispiel für WPForms. Prüfe die Felder vor dem Mailversand und markiere erkannte Spam-Einsendungen als Fehler.

Einfügen in: wp-content/themes/DEIN-CHILD-THEME/functions.php (alternativ eigenes Plugin)



add_action('wpforms_process', function ($fields, $entry, $form_data, $entry_id) {
    $sender = '';
    $recipient = get_option('admin_email');
    $subject = $form_data['settings']['form_title'] ?? 'WPForms Anfrage';
    $message = '';

    foreach ($fields as $field) {
        if (! empty($field['type']) && $field['type'] === 'email') {
            $sender = sanitize_email($field['value'] ?? '');
        }

        $message .= is_array($field['value']) ? implode(' ', $field['value']) : (string) ($field['value'] ?? '');
        $message .= "\n";
    }

    $response = wp_remote_post('https://antispam.example.com/api/v1/scan', [
        'timeout' => 10,
        'headers' => [
            'Accept' => 'application/json',
            'Content-Type' => 'application/json',
            'X-Spam-Username' => 'dein-benutzername',
            'X-Spam-Password' => 'dein-passwort',
            'X-Spam-ApiKey' => 'dein-api-key',
        ],
        'body' => wp_json_encode([
            'sender' => $sender,
            'recipient' => $recipient,
            'subject' => $subject,
            'message' => trim($message),
        ]),
    ]);

    if (is_wp_error($response)) {
        return;
    }

    $result = json_decode(wp_remote_retrieve_body($response), true);

    if (($result['verdict'] ?? '') === 'blocked') {
        wpforms()->process->errors[$form_data['id']]['header'] = __('Das Formular wurde als Spam erkannt und nicht gesendet.', 'textdomain');
    }
}, 10, 4);

PrestaShop Anleitung

Empfohlener Weg: eigenes Modul anlegen und dort den Spam-Check vor dem Versand der Kontaktanfrage ausführen.

  • Modul-Datei anlegen: modules/sentryform/sentryform.php
  • Formulardaten vor Mailversand abfangen (Hook oder Controller-Override)
  • Bei verdict = blocked den Versand stoppen und eine Fehlermeldung zurückgeben
class Sentryform extends Module
{
    public function install()
    {
        return parent::install();
    }

    private function checkSpam(array $payload): bool
    {
        // API aufrufen und true zurückgeben, wenn Spam erkannt wurde
        return false;
    }
}

Shopware 6 Anleitung

Empfohlener Weg: eigenes Plugin unter custom/plugins erstellen und die Kontaktformular-Verarbeitung um einen Spam-Check erweitern.

  • Plugin-Struktur anlegen: custom/plugins/SentryForm/src
  • Service/Subscriber registrieren und beim Formular-Submit prüfen
  • Bei verdict = blocked Validierungsfehler setzen und Versand abbrechen
class ContactSpamSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents(): array
    {
        return [
            // Kontaktformular-Event hier registrieren
        ];
    }

    public function onContactSubmit($event): void
    {
        // API aufrufen und bei Spam den Submit abbrechen
    }
}
Bei Fragen oder Problemen kontaktieren Sie bitte unseren Support unter support@sentryform.online