Contact Form 7: отправка данных формы на несколько email через фильтр wpcf7_mail_components

Почему стандартная отправка Contact Form 7 не всегда подходит для нескольких email

Contact Form 7 по умолчанию поддерживает отправку писем на несколько адресов через поле «Кому» с разделением адресов запятыми, например, email1@example.com, email2@example.com. Но такой способ часто вызывает проблемы с доставкой, особенно при использовании SMTP или внешних почтовых сервисов, из-за особенностей SPF, DKIM и DMARC. Также невозможно динамически менять получателей в зависимости от данных формы.

Для решения этих задач рекомендуется использовать фильтр wpcf7_mail_components, который позволяет программно изменять параметры письма перед отправкой, в том числе список адресатов.

Диагностика проблемы: как понять, что нужно отправлять письма на несколько email через фильтр

  • Требуется отправлять письма на разные адреса в зависимости от выбранных пользователем опций в форме.
  • Стандартное поле «Кому» с несколькими адресами не работает корректно (письма не доходят или попадают в спам).
  • Необходимо отправлять письмо копии нескольким сотрудникам без раскрытия адресов друг другу.
  • Хотите реализовать логику, где разные поля email получают разные части письма.

Пошаговое решение: использование фильтра wpcf7_mail_components для отправки на несколько email

1. Создайте или отредактируйте файл functions.php вашей темы или используйте подключаемый плагин для пользовательских функций.

2. Добавьте следующий код, где вы программно указываете адреса получателей в зависимости от данных формы:

add_filter('wpcf7_mail_components', function($mail_components, $contact_form) {
    // Получаем объект текущей формы
    $submission = WPCF7_Submission::get_instance();
    if (!$submission) {
        return $mail_components;
    }

    $data = $submission->get_posted_data();

    // Пример: если пользователь выбрал опцию "support", отправляем на support@example.com
    // если "sales" - на sales@example.com и дополнительно на manager@example.com
    $recipients = [];
    if (!empty($data['department'])) {
        switch ($data['department']) {
            case 'support':
                $recipients[] = 'support@example.com';
                break;
            case 'sales':
                $recipients[] = 'sales@example.com';
                $recipients[] = 'manager@example.com';
                break;
            default:
                $recipients[] = 'info@example.com';
        }
    } else {
        $recipients[] = 'info@example.com';
    }

    // Присваиваем адреса в поле "To"
    $mail_components['to'] = implode(', ', $recipients);

    return $mail_components;
}, 10, 2);

3. В форме Contact Form 7 добавьте поле выбора [select department "support" "sales"] с именем department.

Как проверить, что решение сработало

  1. Отправьте форму с разными значениями поля department.
  2. Проверьте исходящие письма на почтовом сервере или в почтовом клиенте — письма должны приходить на адреса, предусмотренные в коде.
  3. Если используется SMTP-плагин, проверьте логи отправки и убедитесь, что письма отправляются корректно.
  4. При необходимости добавьте в код логирование для отладки, например, error_log(print_r($mail_components, true));.

Частые ошибки и их исправление

  • Письма не отправляются или приходят только на один адрес: проверьте правильность разделения адресов через запятую и отсутствие пробелов внутри адресов.
  • Фильтр не срабатывает: убедитесь, что функция подключена в functions.php, и что при отправке формы используется именно Contact Form 7.
  • Ошибки PHP в логах: проверьте синтаксис и наличие функции WPCF7_Submission::get_instance(), которая доступна с версии CF7 5.0+
  • Письма попадают в спам: настройте SPF, DKIM, DMARC для домена, используйте SMTP-плагин с правильными учетными данными.

Практические советы по безопасности и производительности

  • Не вставляйте в список получателей email из ненадежных источников без валидации — это может привести к рассылке спама с вашего сервера.
  • Для повышения производительности не используйте тяжелые операции внутри фильтра, так как он вызывается при каждом отправлении формы.
  • Используйте SMTP-плагины (например, WP Mail SMTP) для надежной отправки почты и минимизации попадания в спам.
  • Если требуется отправлять разные письма разным адресатам, рассмотрите отправку дополнительных писем через хук wpcf7_mail_sent.

Сравнение подходов для отправки на несколько email

МетодПлюсыМинусыПример использования
Указание нескольких email в поле «Кому» Простота настройки Проблемы с доставкой, нет динамики to: admin@example.com, support@example.com
Фильтр wpcf7_mail_components Динамическая логика, гибкость Требует кода, внимательности Пример из статьи выше
Отправка отдельных писем в wpcf7_mail_sent Можно создавать кастомные письма Сложнее, дублирование кода Хук для отправки дополнительных писем

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Contact Form 7: как автоматически удалять отправленные данные и логи формы
05.07.2026
Contact Form 7: как избежать потери данных при перезагрузке страницы
23.04.2026
Contact Form 7 и Magento: способы интеграции и обмена данными
02.01.2026
Contact Form 7: как добавить поля для вызова телефонных звонков в форму
14.02.2026
Contact Form 7: как добавить поле для загрузки файлов в форму WordPress
26.11.2025
×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙