【问题标题】:Using wp_mail() instead of mail() in Wordpress does not work在 Wordpress 中使用 wp_mail() 而不是 mail() 不起作用
【发布时间】:2012-03-23 09:31:02
【问题描述】:

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

【问题讨论】:

  • 这个问题解决了吗?我的网站现在遇到了完全相同的问题...感谢您的帮助。

标签: php wordpress wordpress-theming


【解决方案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/ 的示例代码中获取的。

【讨论】:

  • 当我将该代码放入我的 functions.php 文件(用于发送电子邮件)中时,我在整个网站上收到错误 500,不确定 ../.. 是否是正确的数字级别或什么
【解决方案2】:

我花了大约 30 分钟来弄清楚这一点。

如果您使用任何允许您在 WordPress 中配置 SMTP 的工具,请将其删除。

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

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

【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2015-09-28
        • 2016-06-05
        • 1970-01-01
        • 1970-01-01
        • 2020-04-19
        • 2015-05-07
        • 2012-07-22
        • 2017-12-14
        • 1970-01-01
        相关资源
        最近更新 更多