由于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
推荐阅读
- 使用WP_Query()查询新帖子,在WHERE过滤器中使用帖子ID()
- 使用wp_get_recent_posts
- 万字长文带你漫游数据结构世界
- JAVA中的“+”“concat”和“append”
- Excel 怎么用 vlookup 来查找两个表的重复数据(!)
- JAVA中“(”的用法详解)
- java判断包含关系contains方法的使用
- Java NIO Channel 使用
- 万字长文玩转Spark面试: 进大厂必看!