由于我的服务器上已禁用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!");
}
?>
答案 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