Как настроить SMTP для WordPress для отправки данных из формы?
- сайт на Wordpress, размещен на VPS
- в футере есть форма подписки на рассылку (сообщение отправляется на email админа, что пользователь подписан на новости)
<form action="subscribe/email.php" method="POST"> <input type="email" id="email" name="email" placeholder="Введите e-mail" required> <input type="submit" name="subscribe" value="Подписаться"> </form> |
<form action="subscribe/email.php" method="POST"> <input type="email" id="email" name="email" placeholder="Введите e-mail" required> <input type="submit" name="subscribe" value="Подписаться"> </form>
- в отдельной папке лежит файл обработчик:
<?php $to = "admin@store.ru"; $subject = "Пользователь подписался на сайт"; $message = "Email: " . $_POST['email'] . "<br>"; $headers = "Content-type:text/html;charset=UTF-8" . "rn"; mail($to, $subject, $message, $headers); ?> |
<?php $to = "admin@store.ru"; $subject = "Пользователь подписался на сайт"; $message = "Email: " . $_POST['email'] . "<br>"; $headers = "Content-type:text/html;charset=UTF-8" . "rn"; mail($to, $subject, $message, $headers); ?>
- данная форма работает, если добавить ее на тестовый сайт, который без cms и лежит на обычном хостинге
- на сайте, который на Wordpress и на VPS форма не работает
- SMTP на сайте настроил с помощью плагина "WP Mail SMTP" (если делать заказы на сайте отбивки приходят)
- предполагаю, что проблема в настройках почтового сервера и что его необходимо как-то донастроить
Буду благодарен за любую информацию
Дополнительно:
Послушай добрый совет - выкинь этот хлам и используй плагины для форм.
Спасибо за совет!
1. <form action="subscribe/email.php" method="POST">
Если включено ЧПУ, то так делать нельзя. Путь должен быть абсолютным, от корня сайта.
2. mail($to, $subject, $message, $headers);
Если хотите чтобы использовался плагин и соответственно вордпресс, то к скрипту надо подключать вордпресс и вызывать не mail(), а wp_mail(). Однако это хоть рабочий, но не совсем правильный подход. Правильнее сделать свой плагин и подключать скрипт к вордпрессу, а не наоборот.
А еще правильнее не изобретать велосипед, а использовать готовый плагин обратной связи, например, CF7.
- Благодарю за ответ,
попробовал внести правки, поигрался с настройками, поспрашивал у gpt, ничего не помогло (видимо знаний в этой области недостаточно).
В итоге сделал через CF7 по вашему совету, спасибо
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

На WordPress лучше не отправлять письма напрямую через отдельный
email.phpи функциюmail(). Такой обработчик обходит WordPress, плагины SMTP, nonce-защиту, антиспам и нормальную валидацию. Правильнее отправлять черезwp_mail(), а SMTP настроить плагином вроде WP Mail SMTP, FluentSMTP или Post SMTP.Если форма простая, самый быстрый путь — заменить самописный обработчик на Contact Form 7/Fluent Forms и настроить SMTP. Если хотите оставить свою форму, отправку нужно проводить через WordPress AJAX или REST endpoint.
Минимальная идея через
admin-post.php:<form action="/wp-admin/admin-post.php" method="post"> <input type="hidden" name="action" value="subscribe_email"> <input type="email" name="email" required> <button type="submit">Подписаться</button> </form>
add_action('admin_post_nopriv_subscribe_email', 'handle_subscribe_email'); add_action('admin_post_subscribe_email', 'handle_subscribe_email'); function handle_subscribe_email() { $email = sanitize_email($_POST['email'] ?? ''); if (!$email || !is_email($email)) { wp_die('Некорректный email'); } wp_mail( get_option('admin_email'), 'Пользователь подписался на сайт', 'Email: ' . $email ); wp_safe_redirect(home_url('/?subscribed=1')); exit; }
После этого настройте SMTP-плагин: хост, порт, TLS/SSL, логин, пароль или API. Затем отправьте тестовое письмо из админки плагина. Если тест уходит, форма через
wp_mail()тоже будет использовать SMTP. Так письма меньше попадают в спам и не зависят от ограничений PHPmail()на VPS.Важно: если форма стоит в футере на всех страницах, добавьте nonce или хотя бы простую антиспам-проверку. Иначе endpoint быстро начнут использовать боты. Для подписки также желательно не просто отправлять письмо администратору, а сохранять заявку в базе или отправлять её в сервис рассылок. Тогда при сбое почты данные не потеряются.
После настройки SMTP проверьте не только факт доставки, но и SPF/DKIM/DMARC домена. Если отправлять письма от адреса на чужом домене или без правильных DNS-записей, даже SMTP может доставлять письма в спам.