Почему стандартная отправка email в WPForms может не работать надежно
WPForms по умолчанию использует функцию wp_mail() для отправки писем с форм. Однако на многих хостингах эта функция настроена не оптимально или ограничена, что может приводить к попаданию писем в спам или их полной недоставке. Особенно это актуально для сложных форм с вложениями или большим объемом данных.
В таких случаях рекомендуется использовать PHPMailer — мощную библиотеку для отправки email, которая позволяет настроить SMTP, использовать аутентификацию и шифрование, а также детально управлять заголовками и содержанием писем.
Далее рассмотрим, как интегрировать PHPMailer в обработчик WPForms для надежной отправки писем с форм.
Подключение PHPMailer к WPForms: пошаговое руководство
Для начала убедитесь, что в вашей теме или плагине вы можете подключить PHPMailer. В WordPress PHPMailer уже встроен и доступен через глобальный объект $phpmailer.
Ниже пример функции, которая перехватывает отправку формы WPForms и отправляет письмо вручную через PHPMailer с настройкой SMTP сервера:
add_action('wpforms_process_complete', 'wpform_ru_send_email_phpmailer', 10, 4);
function wpform_ru_send_email_phpmailer($fields, $entry, $form_data, $entry_id) {
// Проверяем ID формы, чтобы обработать нужную
if ($form_data['id'] != 123) {
return;
}
// Формируем тело письма из полей формы
$body = "Получена новая заявка из формы:\n";
foreach ($fields as $field) {
$body .= $field['name'] . ': ' . $field['value'] . "\n";
}
// Подключаем глобальный объект PHPMailer
global $phpmailer;
if (! ( $phpmailer instanceof PHPMailer\PHPMailer\PHPMailer )) {
require_once ABSPATH . WPINC . '/PHPMailer/PHPMailer.php';
require_once ABSPATH . WPINC . '/PHPMailer/SMTP.php';
require_once ABSPATH . WPINC . '/PHPMailer/Exception.php';
$phpmailer = new PHPMailer\PHPMailer\PHPMailer(true);
}
try {
// Настройка SMTP
$phpmailer->isSMTP();
$phpmailer->Host = 'smtp.yourdomain.com'; // SMTP сервер
$phpmailer->SMTPAuth = true;
$phpmailer->Username = 'user@yourdomain.com'; // Логин SMTP
$phpmailer->Password = 'yourpassword'; // Пароль SMTP
$phpmailer->SMTPSecure = PHPMailer\PHPMailer\PHPMailer::ENCRYPTION_STARTTLS;
$phpmailer->Port = 587;
// От кого
$phpmailer->setFrom('no-reply@yourdomain.com', 'WPForms');
// Кому
$phpmailer->addAddress('admin@yourdomain.com', 'Администратор');
$phpmailer->Subject = 'Новая заявка с формы на сайте';
$phpmailer->Body = $body;
$phpmailer->send();
} catch (Exception $e) {
error_log('WPForm RU PHPMailer error: ' . $phpmailer->ErrorInfo);
}
}Этот код нужно добавить в файл functions.php вашей темы или в кастомный плагин. В нем мы слушаем событие успешной отправки формы, фильтруем нужную форму по ID и самостоятельно формируем письмо и отправляем его через PHPMailer с SMTP.
Как узнать ID формы WPForms и настроить SMTP
ID формы можно узнать в админке WPForms — при просмотре списка форм кликните на нужную, в URL будет параметр id=123 или посмотрите в списке форм.
Настройки SMTP зависят от вашего почтового провайдера. Например, для Gmail:
- Host: smtp.gmail.com
- Port: 587 (TLS) или 465 (SSL)
- Username и Password: ваш аккаунт Gmail
- SMTPSecure: 'tls' или 'ssl'
Рекомендуется создавать отдельный почтовый ящик для отправки уведомлений с сайта.
Расширение кода: добавление вложений из WPForms
Если форма содержит поля загрузки файлов, их можно прикрепить к письму. Например, с учетом что поле с загрузкой имеет ID 5:
foreach ($fields as $field) {
if ($field['id'] == 5 && !empty($field['value'])) {
$upload_dir = wp_upload_dir();
$file_path = $upload_dir['basedir'] . '/' . $field['value'];
if (file_exists($file_path)) {
$phpmailer->addAttachment($file_path);
}
}
}Этот код вставьте перед вызовом $phpmailer->send(); чтобы прикрепить файл к письму.
Преимущества использования PHPMailer с WPForms
- Гарантированная доставка писем благодаря SMTP с аутентификацией.
- Возможность кастомизировать заголовки, тело и формат письма.
- Поддержка вложений и HTML-формата.
- Логирование ошибок отправки для отладки.
Если вы хотите более простой способ настройки SMTP в WordPress, можно использовать плагин Clearfy Pro, который позволяет быстро подключить SMTP без кода.