X
  • Дизайн та розробка сайту
  • Дизайн і створення сайтів. Розробка тем для WordPress. Створення Landing Page.
  • office@gnatkovsky.com.ua
  • @vgnat
  • Написати мені
Замовити послугу

Не отправляются письма WordPress из самописных форм

Приклад
  • 2024-12-03
  • 7018 переглядів

  • Дизайн та розробка сайту

Доброго времени суток. 🙂

Новый день и новая статья о WordPress, в которой я расскажу об одной маленькой проблеме что может возникнуть на вашем сайте WordPress. Иногда бывает проблема отправки писем средствами PHP из самописных форм. То есть на сайте имеется, например, плагин Contact Form 7 и с него все письма приходят, но когда вы используете свою самописную форму, почему-то письма не приходят.

Не отправляются письма WordPress из самописных форм

В моей практике такое случается редко, но случается. Чаще всего это четыре основные причин, о которых я и напишу в этой статье. На самом деле все очень просто, так что не будем затягивать.

Запрет отправки писем с помощью PHP

Бывает, что на хостинге установлен запрет отправки писем с помощью PHP функции mail(). Но тогда как отправляет Contact Form 7 ? Проверьте не установлен ли у вас еще один плагин

wpPHPMailer
или схожие с ним, которые отправляют почту через указанный в настройках smtp-сервер. Чаще всего пользуются серверами Yandex. Если это так, то вашу собственную форму, тоже нужно настроить и переделать под smtp. Сложно но возможно.

Так же можно разобраться почему стоит запрет на отправку через PHP mail(). Возможно, установлен дешевый тариф или просто так настроен аккаунт. Может вы потратите 5 минут, настроите сами все правильно и все заработает в обычном режиме, только не забудьте отключить smtp плагин.

Ошибка в коде самой формы

Думаю тут все понятно. Перепроверьте 100 раз код вашей формы. Возможно при написании функции отправки, вы где-то допустили ошибку. Довольно часто ко мне обращаются с просьбой помочь настроить форму для отправки писем, которая почему-то не работает. Из самых частых ошибок - отсутствие кавычек, ошибка в подключении обработчика и тд. Как говорится, семь раз отмерь - один отрежь.

Неправильно указана почта отправителя

Как бы это странно не звучало, но именно эта проблема и является самой популярным решением. Дело в том, что иногда хостинг не отправляет письмо если оно имеет не стандартный WordPress адрес. Если конкретно, то у WordPress всегда почта отправителя имеет такой вид - wordpress@site.com, где, естественно, site.com - адрес вашего сайта. Например, для моего сайта это wordpress@gnatkovsky.com.ua. Думаю вам понятно, как это работает.

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

Несуществующий адрес отправителя.

Данная проблема, очень схожа с предыдущей, иногда они даже связаны между собой. Сейчас попробую объяснить. Допустим, вы указали в вашем коде формы, e-mail отправителя, которой не существует. В итоге вы пользуетесь третьим решением и указываете wordpress@site.com, но все же проблема остается. Так бывает из за того что на хостинге не существует почты wordpress@site.com. Вам просто нужно создать такую почту на хостинге. В каждом личном кабинете хостинга есть почтовые сервисы, для создания собственных ящиков. Создайте нужный вам адрес с доменом вашего сайта и укажите его в отправителях. Чтобы наверняка создавайте адрес из третьего примера - wordpress@site.com. Естественно, где site.com - адрес вашего сайта.

Так что если вы воспользовались решением из проблемы №3, то примените и №4, возможно именно в связке вы решите проблему с отправкой писем из WordPress

Бонус

Как бонус к статье предлагаю простейшую форму для проверки работает ли вообще отправка писем.

Создайте файл, например, mail.php и поместите в него следующий код:

<?php
    $to = "myemail@gmail.com"; //куда отправлять письмо, укажите свой e-mail
    $subject = "Проверка работы mailPHP";
	$sit_url = $_SERVER['SERVER_NAME'];
    $message = 'Если вы это читаете, значит письмо отправлено успешно';
    $headers = "Content-type: text/html; charset=UTF-8 \r\n";
    $headers .= "From: <wordpress@".$sit_url.">\r\n";
    $result = mail($to, $subject, $message, $headers);
  
    if ($result){
	header('Content-type: text/html; charset=utf-8');
    echo "Функция сработала, если хостинг отправил письмо, то вы его найдете у себя в почтовом клиенте.";
    }else{ 
	header('Content-type: text/html; charset=utf-8');
	echo "Что-то пошло не так :(";}
?>

Во второй строке укажите свою почту, куда должно прийти письмо проверки. В седьмой строке указана почта отправителя. Указана стандартная для вашего сайта wordpress@ и дальше ваш домен, что сформируется с помощью переменной $sit_url, которая благодаря $_SERVER пропишет ваш домен.

Если хотите можете указать произвольный e-mail, но уже после того как проверите с тем что прописано сейчас. Указать можно например так:

$headers .= "From: <no-reply@site.com>\r\n";

Когда создали файл с данным кодом, то залейте его в корневую папку сайта. В самую главную, где лежат все папки и файлы WordPress. Далее просто перейдите в браузер и введите адрес вашего сайта слеш и mail.php, получится что-то типа такого - site.com/mail.php

Если вы все сделаете правильно и на вашем сайте работает PHP отправка, то вам на почту придет письмо. если это случилось, значит с вашим сайтом все ок и нужно искать проблему в коде той формы, что не работает.

Вот и вся статья, надеюсь вы не столкнетесь с такой проблемой, но если все же такое случилось, думаю моя статья вам поможет.

На этом все, спасибо за внимание. 🙂

Якщо Вам була корисна моя праця, можете фінансово підтримати сайт або відключити блокувальник реклами, що займе 2 хвилини :)

Хочу підтримати фінансово Хочу відключити блокувальник

Оцініть статтю
  1. 5
  2. 4
  3. 3
  4. 2
  5. 1
Проголосовало: 5, в среднем: 5 из 5
Читайте також

Deprecated: Функція WP_Query викликана з аргументом, який вважається застарілим з версії 3.1.0! Вираз caller_get_posts застарілий. Використовуйте ignore_sticky_posts. in /var/www/vhosts/gnatkovsky.com.ua/gnatkovsky.com.ua/public/wp-includes/functions.php on line 6078