WordPress无插件实现SMTP邮件服务

一、代码

刚开始用easy smtp mail插件,但是上网查了一下,不用插件也可以,在三子博客上发现是基于smtp这个插件修改的,最终代码如下(亲测可行):

//使用smtp发送邮件,笔者用的是QQ邮箱,你可以参照你使用的邮箱具体设置SMTP
add_action('phpmailer_init', 'mail_smtp');
function mail_smtp( $phpmailer ) {
$phpmailer->FromName = '那樊笼'; //发件人的名称,这里写你的网名或者博客名
$phpmailer->Host = 'smtp.qq.com'; //修改为你使用的SMTP服务器,这是QQ邮箱的
$phpmailer->Port = 25; //SMTP端口,这里是qq的端口,其他邮箱比如126的请自行百度
$phpmailer->Username = 'nafanlong@vip.qq.com'; //邮箱账户,这里只写QQ号就行,
$phpmailer->Password = 'odfqohypdhzqbfbg'; //邮箱密码
$phpmailer->From = 'nafanlong@vip.qq.com'; //在邮件中显示发件人的邮箱,也是有人回复需要评论时的收件邮箱
$phpmailer->SMTPAuth = true;
$phpmailer->SMTPSecure = ''; //tls or ssl (port=25留空,465为ssl)
$phpmailer->IsSMTP();
}

注意:这里需要注意一点,用上述功能你的邮箱必须开通STMP功能。不过qq邮箱有点特殊,其他邮箱不清楚,由于qq邮箱近期更新,上面的qq密码要填你们的授权码,如下图:

20160504152909

二、邮件回复通知功能以及邮件通知样式的简单美化

由于发现回复格式太难看,于是这里分享一下我的通知功能以及格式的代码:

//邮件回复通知
function comment_mail_notify($comment_id) {
	$admin_notify = '1';//其实这里就是选择是否通知,1为是,0为否
	$admin_email = get_bloginfo ('admin_email');
	$comment = get_comment($comment_id);
	$comment_author_email = trim($comment->comment_author_email);
	$parent_id = $comment->comment_parent ? $comment->comment_parent : '';
	global $wpdb;
	if ($wpdb->query("Describe {$wpdb->comments} comment_mail_notify") == '')
		$wpdb->query("ALTER TABLE {$wpdb->comments} ADD COLUMN comment_mail_notify TINYINT NOT NULL DEFAULT 0;");
	if (($comment_author_email != $admin_email && isset($_POST['comment_mail_notify'])) || ($comment_author_email == $admin_email && $admin_notify == '1'))
		$wpdb->query("UPDATE {$wpdb->comments} SET comment_mail_notify='1' WHERE comment_ID='$comment_id'");
	$notify = $parent_id ? '1' : '0';
	$spam_confirmed = $comment->comment_approved;
	if ($parent_id != '' && $spam_confirmed != 'spam' && $notify == '1') {
		$wp_email = 'no-reply@' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME']));
		$to = trim(get_comment($parent_id)->comment_author_email);
		$subject = '你在' . get_option("blogname") . '的留言有了回复';
		$message = '
		<div id="mailtou" style="width:39em;max-width:90%;height:auto;margin-top:10px;margin-bottom:48px;margin-left:auto;margin-right:auto;padding:40px;border:1px solid #ededed;font-size:13px;line-height:14px;">
			<p class="mail_title" style="font-size:15px;color:#df846c;margin-bottom:30px;">你在&#8968; '. get_the_title($comment->comment_post_ID) .' &#8971;留言:</p>
			<p style="border:1px solid #EEE;overflow:auto;padding:10px;margin:1em 0;"><span style="color:#df846c;">'. trim(get_comment($parent_id)->comment_author) .'</span>:'. trim(get_comment($parent_id)->comment_content) .'</p>
			<p style="border:1px solid #EEE;overflow:auto;padding:10px;margin:1em 0 1em 60px;"><span style="color:#df846c;">'. trim($comment->comment_author) .'</span>:'. trim($comment->comment_content) .'</p>
			<p style="margin-bottom:10px">点击<a href="' . htmlspecialchars(get_comment_link($parent_id)) . '" style="color:#df846c;text-decoration:none;outline:none;">查看完整内容</a></p>
			<p style="margin-bottom:10px">(此邮件由系统发出,无需回复.)</p>
		</div>';
		$from = "From: \"" . get_option('blogname') . "\" <$wp_email>";
		$headers = "$from\nContent-Type: text/html; charset=" . get_option('blog_charset') . "\n";
		wp_mail( $to, $subject, $message, $headers );
	}
}
add_action('comment_post', 'comment_mail_notify');

上面的$message = ' ';中间div部分的就是你要的样式,上面的样式如下(当然会css的朋友可以自己写一下样式):

QQ图片20150610102232

三、邮件回复时“通知我”

在functions.php下加下面代码可以实现“有人回复时是否用邮件通知我”。

/* 自动加勾选栏*/
function add_checkbox() {
echo '<div style="margin: 0;"><input id="comment_mail_notify" style="margin-left: 550px; width: 10px; height: 30px;" checked="checked" name="comment_mail_notify" type="checkbox" value="comment_mail_notify" /><label style="color: grey; position: relative;" for="comment_mail_notify"><span style="margin-bottom: 30px;">有人回复时邮件通知我</span></label></div>';
}
add_action('comment_form', 'add_checkbox');

如下效果:

QQ图片20150610112921

其实就是通过一个checkbox来改变comment_mail_notify的值为1或者0来实现是否通知。

这样就大功告成了!插件又少一个~

标签:   |  
时间: 2015年06月10日上午10:50  |  
作者:
4 COMMENTS
  1. 2016/05/03
    helsinglee

    不错,谢谢分享了哦。

  2. 2016/05/29
    Blankj

    $phpmailer->;Port = 25;
    中间的分号都多余了

    • 2016/05/29
      那樊笼
      @Blankj 咦?为啥会多个分号。。谢谢你纠正哈~
LEAVE A REPLY
loading
正在赶回来……