在Wordpress中使用wp_mail()而不是mail()不起作用

时间:2012-03-05 21:56:07

标签: php wordpress wordpress-plugin wordpress-theming

由于我的服务器上已禁用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\-]+\.)+[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!");
}
?>

4 个答案:

答案 0 :(得分: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 :(得分:1)

我已经失去了大约30分钟来解决这个问题。

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

然后将所有内容放入函数中:

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

答案 2 :(得分:1)

默认情况下,Wordpress函数wp_mail()使用PHP内部mail()函数,因此您所做的更改无法解决问题。

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

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

编辑:您仍然需要将代码切换为使用wp_mail()功能,该功能将自动使用SMTP(如果您安装了WP SMTP插件)。

答案 3 :(得分:0)

这是有道理的,因为wp_mail()也有类似的服务器要求,可以在这里找到:http://codex.wordpress.org/Function_Reference/wp_mail