MailPoet bietet zwar einen eigenen Spamschutz, blendet bei verdächtigen Anmeldungen aber
unter Umständen ein schwer lesbares internes CAPTCHA ein.
Das kann sogar dann passieren, wenn unter
MailPoet → Einstellungen → Erweitert → Protect your MailPoet forms against spam signups
bereits
„None – I use another spam protection“
ausgewählt wurde.
Ursache ist MailPoets zusätzliche Prüfung über sogenannte
Behavioral Signals.
Wenn diese Prüfung einen Besucher nicht eindeutig als menschlich erkennt,
kann MailPoet trotzdem sein eigenes CAPTCHA erzwingen.
Lösung
MailPoets Behavioral-Prüfung wird deaktiviert und die eigentliche Spamprüfung
an Maspik übergeben.
Maspik prüft dabei ausschließlich die normalen MailPoet-Felder:
- Vorname
- Nachname
Wird Spam erkannt, bricht MailPoet die Anmeldung ab,
bevor der Subscriber angelegt wird.
Snippet
<?php
/**
* ============================================================
* MAILPOET + MASPIK SPAMSCHUTZ
* ============================================================
*
* - deaktiviert MailPoets Behavioral-CAPTCHA-Fallback
* - übergibt E-Mail, Vorname und Nachname an Maspik
* - blockiert Spam vor dem Anlegen des Subscribers
*/
/**
* MailPoets Behavioral-Spamschutz deaktivieren.
*
* Auch bei "None – I use another spam protection" kann MailPoet
* andernfalls sein eigenes CAPTCHA anzeigen.
*/
add_filter(
'mailpoet_behavioral_signals_looks_human',
'__return_true'
);
/**
* Maspik-Spamschutz für MailPoet.
*
* Der Hook läuft direkt vor dem Anlegen des Subscribers.
*/
add_action(
'mailpoet_subscription_before_subscribe',
function ($data, $segmentIds, $form) {
// Maspik nicht verfügbar -> MailPoet normal weiterlaufen lassen.
if (!function_exists('maspik_is_spam')) {
return;
}
$fields = [];
// E-Mail
if (!empty($data['email'])) {
$fields[] = [
'type' => 'email',
'field_name' => 'email',
'value' => (string) $data['email'],
];
}
// Vorname
if (!empty($data['first_name'])) {
$fields[] = [
'type' => 'text',
'field_name' => 'first_name',
'value' => (string) $data['first_name'],
];
}
// Nachname
if (!empty($data['last_name'])) {
$fields[] = [
'type' => 'text',
'field_name' => 'last_name',
'value' => (string) $data['last_name'],
];
}
if (empty($fields)) {
return;
}
// Maspik prüfen lassen.
if (maspik_is_spam($fields, 'MailPoet')) {
throw new \MailPoet\Exception(
'Die Anmeldung konnte nicht verarbeitet werden.'
);
}
},
10,
3
);
Warum funktioniert das?
MailPoet stellt den Hook
mailpoet_subscription_before_subscribe
direkt vor dem eigentlichen Anlegen des Subscribers bereit.
Wird innerhalb dieses Hooks eine
\MailPoet\Exception
ausgelöst, wird die Anmeldung abgebrochen.
Dadurch wird ein von Maspik erkannter Spam-Eintrag gar nicht erst
als Subscriber in MailPoet gespeichert.
MailPoet-Standardfelder
Die normalen MailPoet-Felder verwenden keine numerischen IDs.
Die relevanten Keys sind:
email
first_name
last_nameEigene MailPoet-Custom-Fields verwenden dagegen IDs im Stil von
cf_123.
Für normale Newsletter-Anmeldungen sind diese in der Regel nicht notwendig.
Test
- MailPoets eigenen CAPTCHA-Spamschutz auf „None – I use another spam protection“ stellen.
- Maspik-Logging aktivieren.
- Eine normale Newsletter-Anmeldung durchführen.
- Danach eine Eingabe verwenden, die sicher eine Maspik-Regel trifft.
- Prüfen, ob der Spam-Versuch im Maspik-Log erscheint.
- Prüfen, ob kein Subscriber in MailPoet angelegt wurde.
Im Test wurde beispielsweise
„Test Tester“
bereits zuverlässig von Maspik blockiert.
Hinweis
Bei Verwendung in einem bestehenden MU-Plugin darf das öffnende
<?php
natürlich nicht ein zweites Mal eingefügt werden.