---
layout: post # 使用的布局(不需要改)
title: WordPress使用phpMailer添加投稿功能 # 标题
subtitle: wordpress博客优化2015-04-11 #副标题
date: 2019-11-04 # 时间
author: Duter2016 # 作者
header-img: img/post-bg-ioses.jpg #这篇文章标题背景图片
header-mask: "0.1" # 博文页面上端的背景图片的亮度,数值越大越黑暗
catalog: true # 开启catalog,将在博文侧边展示博文的结构
istop: false # 设为true可把文章设置为置顶文章
music-id: # 网易云音乐单曲嵌入
music-idfull: # 网易云音乐歌单嵌入
tags: #标签
- WordPress
---
今上午在露兜博客看到了wordpress添加投稿功能这篇文章,参照上面的代码,无论怎么配置,邮件就是发送不成功。
我依次在服务器测试了wp_mail()和mail()这两个函数。最终都没有接收到邮件。按后我想到了上次帮朋友配置phpMailer,上次使用phpMailer是可以接收到邮件的,
于是想到时候可以把phpMailer移植到这里呢?经测试,我的想法是可行的。有关phpmailer的使用方法请查看我以前写的这篇文章:phpmailer使用教程及实例演示。
下面可以开始讲解我是怎么使用phpmailer配置wordpress的投稿功能的。
+ 下载phpMailer:
phpMailer官方:,请进去下载最新版的phpMailer,或者在这里下载:[phpMailer](http://www.cnsecer.com/wp-content/uploads/2014/03/phpMailer.zip)
然后如下文件放到主题根目录的 `/inc/phpMailer`文件夹,如果没有这些文件夹,
请手动建立:”`class.phpmailer.php`”,”`class.pop3.php`”,”`class.smtp.php`”,”`PHPMailerAutolod.php`”
在主题根目录创建`tougao.php`
以下部分代码是露兜博客的了wordpress添加投稿功能,在此感谢作者的无私奉献精神。
我的模板使用bootstrap写的,所以DIV什么的可能和你的不一样,你参考下就可以了,下面是tougao.php代码(别忘了进行“初始化phpMailer”部分的参数设置):
```
IsSMTP(); // 启用SMTP
$mail->Host="smtp.exmail.qq.com"; //smtp服务器的名称(这里以126邮箱为例)
$mail->SMTPAuth = true; //启用smtp认证
$mail->Port = 465; //smtp端口
$mail->SMTPKeepAlive = true;
//$mail->SMTPSecure = "ssl";
$mail->Username = "rayjing@rayjing.com"; //你的邮箱名
$mail->Password = "*********"; //邮箱密码
$mail->From = "rayjing@rayjing.com"; //发件人地址(也就是你的邮箱地址)
$mail->FromName = "漫步天涯"; //发件人姓名
$mail->AddAddress("rayjing@rayjing.com","漫步天涯");
$mail->AddReplyTo("zgqdlihuiyuan@126.com", "漫步天涯"); //回复地址(可填可不填)
$mail->WordWrap = 50; //设置每行字符长度
//$mail->AddAttachment("images/01.jpg", "manu.jpg"); // 添加附件,并指定名称
$mail->IsHTML(true); // 是否HTML格式邮件
$mail->CharSet="utf-8"; //设置邮件编码
if( isset($_POST['tougao_form']) && $_POST['tougao_form'] == 'send') {
global $wpdb;
$current_url = 'http://localhost/wordpress/tougao'; // 注意修改此处的链接地址
$last_post = $wpdb->get_var("SELECT `post_date` FROM `$wpdb->posts` ORDER BY `post_date` DESC LIMIT 1");
// 博客当前最新文章发布时间与要投稿的文章至少间隔120秒。
// 可自行修改时间间隔,修改下面代码中的120即可
// 相比Cookie来验证两次投稿的时间差,读数据库的方式更加安全
if ( current_time('timestamp') - strtotime($last_post) < 10 ) {
wp_die('您投稿也太勤快了吧,先歇会儿!
点此返回');
}
// 表单变量初始化
$name = isset( $_POST['tougao_authorname'] ) ? trim(htmlspecialchars($_POST['tougao_authorname'], ENT_QUOTES)) : '';
$email = isset( $_POST['tougao_authoremail'] ) ? trim(htmlspecialchars($_POST['tougao_authoremail'], ENT_QUOTES)) : '';
$blog = isset( $_POST['tougao_authorblog'] ) ? trim(htmlspecialchars($_POST['tougao_authorblog'], ENT_QUOTES)) : '';
$title = isset( $_POST['tougao_title'] ) ? trim(htmlspecialchars($_POST['tougao_title'], ENT_QUOTES)) : '';
$category = isset( $_POST['cat'] ) ? (int)$_POST['cat'] : 0;
$content = isset( $_POST['tougao_content'] ) ? trim(htmlspecialchars($_POST['tougao_content'], ENT_QUOTES)) : '';
// 表单项数据验证
if ( empty($name) || mb_strlen($name) > 20 ) {
wp_die('昵称必须填写,且长度不得超过20字。
点此返回');
}
if ( empty($email) || strlen($email) > 60 || !preg_match("/^([a-z0-9+_-]+)(.[a-z0-9+_-]+)*@([a-z0-9-]+.)+[a-z]{2,6}$/ix", $email)) {
wp_die('Email必须填写,且长度不得超过60字,必须符合Email格式。
点此返回');
}
if ( empty($title) || mb_strlen($title) > 100 ) {
wp_die('标题必须填写,且长度不得超过100字。
点此返回');
}
if ( empty($content) || mb_strlen($content) > 15000 || mb_strlen($content) < 100) {
wp_die('内容必须填写,且长度不得超过15000字,不得少于100字。
点此返回');
}
$post_content = '昵称: '.$name.'
Email: '.$email.'
blog: '.$blog.'
内容:
'.$content;
$tougao = array(
'post_title' => $title,
'post_content' => $post_content,
'post_category' => array($category)
);
// 将文章插入数据库
$status = wp_insert_post( $tougao );
$mail->Subject =$title; //邮件主题
$mail->Body .= "姓名".$name."
"; //邮件内容
$mail->Body .= "邮箱".$email."
"; //邮件内容
$mail->Body .= "博客".$blog."
"; //邮件内容
$mail->Body .= "分类".$category."
"; //邮件内容
$mail->Body .= "内容".$content."
"; //邮件内容
$mail->AltBody = "文件正文不支持HTML"; //邮件正文不支持HTML的备用显示
if ($status != 0) { //发送邮件
if(!$mail->Send()) { //如果邮件发送失败
echo "邮件发送失败
";
echo "phpMailer 错误: " . $mail->ErrorInfo; //输出错误信息
exit();
} else {
wp_die('投稿成功!感谢您的投稿!点此返回', '投稿成功');
}
}
else {
wp_die('投稿失败!点此返回');
}
}
?>
```
**创建页面**:
进入wordpress创建页面,并选择模板“`tougao`”保存即可。然后访问`http://你的域名/tougao`,即可看到如下效果:
![](https://raw.githubusercontent.com/Duter2016/GitNote-images/master/Images/2019/11/04/wordpress%20tougao.png)
提交后即可接收到邮件:
**本文中的CSS已经修改好了,如果不合适还可以再修改CSS**,祝成功。
也可以不使用phpMailer发送邮件,即投稿后不发邮件提醒,上面的代码改为下面的就可以了,也不用添加inc文件夹了:
```
get_var("SELECT `post_date` FROM `$wpdb->posts` ORDER BY `post_date` DESC LIMIT 1");
// 博客当前最新文章发布时间与要投稿的文章至少间隔120秒。
// 可自行修改时间间隔,修改下面代码中的120即可
// 相比Cookie来验证两次投稿的时间差,读数据库的方式更加安全
if ( current_time('timestamp') - strtotime($last_post) < 10 ) {
wp_die('您投稿也太勤快了吧,先歇会儿!
点此返回');
}
// 表单变量初始化
$name = isset( $_POST['tougao_authorname'] ) ? trim(htmlspecialchars($_POST['tougao_authorname'], ENT_QUOTES)) : '';
$email = isset( $_POST['tougao_authoremail'] ) ? trim(htmlspecialchars($_POST['tougao_authoremail'], ENT_QUOTES)) : '';
$blog = isset( $_POST['tougao_authorblog'] ) ? trim(htmlspecialchars($_POST['tougao_authorblog'], ENT_QUOTES)) : '';
$title = isset( $_POST['tougao_title'] ) ? trim(htmlspecialchars($_POST['tougao_title'], ENT_QUOTES)) : '';
$category = isset( $_POST['cat'] ) ? (int)$_POST['cat'] : 0;
$content = isset( $_POST['tougao_content'] ) ? trim(htmlspecialchars($_POST['tougao_content'], ENT_QUOTES)) : '';
// 表单项数据验证
if ( empty($name) || mb_strlen($name) > 20 ) {
wp_die('昵称必须填写,且长度不得超过20字。
点此返回');
}
if ( empty($email) || strlen($email) > 60 || !preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $email)) {
wp_die('Email必须填写,且长度不得超过60字,必须符合Email格式。
点此返回');
}
if ( empty($title) || mb_strlen($title) > 100 ) {
wp_die('标题必须填写,且长度不得超过100字。
点此返回');
}
if ( empty($content) || mb_strlen($content) > 15000 || mb_strlen($content) < 50) {
wp_die('内容必须填写,且长度不得超过15000字,不得少于50字。
点此返回');
}
$post_content = '昵称: '.$name.'
Email: '.$email.'
blog: '.$blog.'
内容:
'.$content;
$tougao = array(
'post_title' => $title,
'post_content' => $post_content,
'post_category' => array($category)
);
// 将文章插入数据库
$status = wp_insert_post( $tougao );
if ($status != 0) {
// 投稿成功给博主发送邮件
// somebody#example.com替换博主邮箱
// My subject替换为邮件标题,content替换为邮件内容
wp_mail("somebody#example.com","My subject","content");
wp_die('投稿成功!感谢您的投稿!
点此返回', '投稿成功');
}
else {
wp_die('投稿失败!
点此返回');
}
}
?>
```
如果想为投稿正文的编辑框调用wordpress自带的富文本编辑器可以对上面的代码做以下更改:
把以下代码:
```
```
替换为:
```
false) ); ?>
```
这样就可以了!
**参考文献**:
+ [WordPress添加投稿功能](https://www.ludou.org/wordpress-add-contribute-page.html)