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

由于PHP邮件已在我的服务器上禁用, 因此它停止了主题集成联系表单的工作。
该主题称为Boldy, 它有自己的sendmail.php文件, 该文件使用mail()而不是wp_mail()。
【在WordPress中使用wp_mail()代替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

    推荐阅读