Есть сайт на Drupal 7, на сайте несколько форм обратной связи, с которой приходит тонна хлама. Пытались ставить готовые антиспам-модули - эффекта не дало.
Хочу попробовать фильтровать спам по неправдоподобным именам (в поле "Ваше имя:" написана белиберда на латинице) непосредственно перед отправкой на почту.
Нашел в модуле функцию, отвечающую за отправку
$message = drupal_mail('webform', 'submission', $address, $language, $mail_params, $email['from']);
if ($message['result']) {
$send_count += $send_increment;
}
Как обернуть её в проверку по отправляемому на email тексту?
Искать придётся строку, состоящую из "Ваше имя: " и рандомных латинских букв;
Искать среди значений массива $mail_params.
Я попытался так: если в массиве не встречается строка "Ваше имя: wsdfSDFASds", то отправляем письмо
if (!array_search(preg_grep('/Ваше имя: ([A-Za-z])*/', $mail_params))){
$message = drupal_mail('webform', 'submission', $address, $language, $mail_params, $email['from']);
if ($message['result']) {
$send_count += $send_increment;
}
}
Но или неверно составил регулярное выражение, или неверно построил сам код; в общем, это решение не работает.