2012-03-05 3 views
1

Поскольку PHP-почта отключена на моем сервере, она перестала работать с интегрированной формой контакта.Использование wp_mail() вместо mail() в Wordpress не работает

Тема называется 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\-]+\.)+[a-z]{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!"); 
} 
?> 
+0

Было ли это когда-либо разрешено? Я сталкиваюсь с тем же вопросом сейчас для моего сайта ... Любая помощь приветствуется. – jaressloo

ответ

2

Вставить в строке 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/.

1

Я потерял около 30 минут, выяснив это.

Если вы используете что-либо, что позволяет настроить SMTP в WordPress, выньте его.

Затем положить все в функцию:

add_action('init','delay_until_init'); 
function delay_until_init(){ 
    // call wp_mail() here 
} 
1

По умолчанию Wordpress функции wp_mail() использует ПГПС внутренней mail() функции так изменения вы сделали не решат проблему.

Если ваш веб-сервер отключил стандартную функцию PHP mail(), вам необходимо перейти на использование SMTP для отправки ваших писем.

Существует несколько способов достижения этого, но самый простой способ, который я нашел, - использовать Easy WP SMTP plugin. После установки вам необходимо настроить плагин для использования данных входа для вашего SMTP-сервера. Если у вас есть адрес Gmail, вы можете использовать эти сведения для его настройки.

EDIT: вам все равно нужно переключить код на функцию wp_mail(), которая будет автоматически использовать SMTP (если у вас установлен плагин WP SMTP).

Смежные вопросы