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.
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,thresholdmatched_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
}
}