由于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
评论前必须登录!
注册