2012-03-05 62 views
1

由于PHP邮件已在我的服务器上禁用,因此它已停止主题集成联系表单的工作。在Wordpress中使用wp_mail()代替邮件()不起作用

这个主题叫做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 2012-05-20 05:29:16

回答

1

我已经失去了大约30分钟搞清楚这一点。

如果您使用的任何内容都允许您在WordPress中配置SMTP,请将其取出。

然后把一切都变成功能:

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

默认情况下,WordPress的功能wp_mail()使用PHP的内部mail()功能,使您所做的更改不会解决问题。

如果您的网络服务器已禁用标准的PHP mail()功能,那么您将需要切换到使用SMTP发送电子邮件。

有几种不同的方法来实现这一点,但我发现最简单的方法是使用Easy WP SMTP plugin。安装完成后,您需要配置插件以使用SMTP服务器的登录详细信息。如果您使用Gmail地址,则可以使用这些详细信息进行设置。

编辑:你仍然需要切换到使用wp_mail()函数,它将自动使用SMTP(如果你有WP SMTP插件安装)。