个性化阅读
专注于IT技术分析

在WordPress中使用wp_mail()代替mail()不起作用

由于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!");
}
?>

#1


在第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/的示例代码中获取了它。


#2


我已经花了大约30分钟的时间弄清楚了这一点。

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

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

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

#3


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

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

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

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


#4


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

赞(0)
未经允许不得转载:srcmini » 在WordPress中使用wp_mail()代替mail()不起作用

评论 抢沙发

评论前必须登录!