--- 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)