Использование wp_mail () вместо mail () в WordPress не работает

Поскольку 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