Поскольку PHP-почта отключена на моем сервере, она перестала работать с интегрированной формой контакта.
Тема называется Boldy, и у нее есть собственный файл sendmail.php, который использует mail()
вместо wp_mail()
.
Изменение mail()
на wp_mail()
не работает, но я не уверен, почему?
<?php if (isset($_POST['submit'])) { error_reporting(E_NOTICE); function valid_email($str) { return ( ! preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[az]{2,6}$/ix", $str)) ? FALSE : TRUE; } if ($_POST['name'] != '' && $_POST['email'] != '' && valid_email($_POST['email']) == TRUE && strlen($_POST['comment']) > 1) { $to = preg_replace("([\r\n])", "", $_POST['receiver']); $from = preg_replace("([\r\n])", "", $_POST['email']); $subject = "Website contact message from ".$_POST['name']; $message = $_POST['comment']; $match = "/(bcc:|cc:|content\-type:)/i"; if (preg_match($match, $to) || preg_match($match, $from) || preg_match($match, $message)) { die("Header injection detected."); } $headers = "From: ".$from."\r\n"; $headers .= "Reply-to: ".$from."\r\n"; if (mail($to, $subject, $message, $headers)) { echo 1; //SUCCESS } else { echo 2; //FAILURE - server failure } } else { echo 3; //FAILURE - not valid email } } else { die("Direct access not allowed!"); } ?>
Вставить в строке 2:
define('WP_USE_THEMES', false); require('../../../wp-load.php');
Хитрость заключается в том, что sendmail.php, как изначально написано, на самом деле не загружается в устройстве wordpress, поэтому wp_mail не определен.
Первая строка должна быть необязательной. Я взял его из примера кода по адресу http://butlerblog.com/2012/09/23/testing-the-wp_mail-function/ .
Я потерял около 30 минут, поняв это.
Если вы используете что-либо, что позволяет настроить SMTP в WordPress, вытащите его.
Затем добавьте все в функцию:
add_action('init','delay_until_init'); function delay_until_init(){ // call wp_mail() here }
По умолчанию функция WordPress wp_mail()
использует внутреннюю функцию wp_mail()
поэтому сделанное изменение не устранит проблему.
Если ваш веб-сервер отключил стандартную функцию PHP mail()
вам необходимо перейти на использование SMTP для отправки ваших писем.
Существует несколько способов достичь этого, но самый простой способ, который я нашел, – использовать плагин Easy WP SMTP . После установки вам необходимо настроить плагин для использования данных входа для вашего SMTP-сервера. Если у вас есть адрес Gmail, вы можете использовать эти сведения для его настройки.
EDIT: вам все равно нужно переключить свой код на wp_mail()
которая будет автоматически использовать SMTP (если у вас установлен плагин WP SMTP).
Это имеет смысл, потому что wp_mail () также имеет требования к серверу similair, которые можно найти здесь: http://codex.wordpress.org/Function_Reference/wp_mail