前言
搭建博客的人都有菜鸟的时候,都有到处去网上搜索自己疑难问题的时候,但是你搜到别人的博客的时候也许有问题会评论别人的文章,别人并不一定会及时会回复你。有时候是病急乱投医,所以留言以后就再也没有去看过了,也许过一段时间就忘记这个事情或是根本连网站都忘记了,对于博主来说别人通过搜索引擎来访问到你的博客,你没有及时回复或许就丢了一个访问者,解决这个事情最好的办法就是邮件通知。
开始的时候并没有感觉到怎么不适应,但是自己搭建博客的时候到处找解决问题的方法,有些博主评论我以后会发一个邮件给我,这样我以后还可以去这个博主的网站去回复,我觉得这样很好,也避免了我专门在电脑里面建个TXT文件专门记录自己留言的博客。那么自己喜欢的事情为什么也不给别人提供呢?
以前我的博客是放到GoDaddy的免费空间的,不支持Mail( )函数。现在换了空间了,自然就有条件了。以前我以为只要放个插件就可以了。这样的插件有WordPress Thread Comment或是我开始用的水煮鱼的comment reply notification。但是我开始测试并没有收到邮件。之前也没有管他,正好今天有空,就拿自己的测试的一个博客实验了下,终于搞定了。
我的实现方法当然就尽量选择不加载插件的方法。直接采用于冯威博客的内容,其实也是差不多从网上搜集的,这些方法都泛滥了。当然这个方法是Willin Kan 写的代码。
安装邮件服务器
首先是要保证你的空间要支持Mail( )函数,要是跟我之前一样的GoDaddy的免费Windows空间就请绕道搜一下其他解决办法吧!(不过我倒是觉得你可以试试下面的介绍的第一项第二项Gmail的方式,因为他们发邮件基本上不走本地邮件服务器,然则也不一定)然后安装个Configure SMTP插件,在后台“插件”下拉菜单中选择“添加新插件”,窗口右侧搜索框输入名称,在结果中选择第一个即可。
安装完毕选择“Setting”,或是在后台中打开“设置”项目,选择"SMTP"项目
如何配置有三项选择,我选择的是第三项。
第一项和第二项首先是利用Gmail发送:
如果你有Gmail邮箱你基本上就剩下很多事情了,打开默认“Send e-mail via GMail? ?”,然后程序自动弹出界面告诉你必须要有Gmail结尾的邮箱帐号和密码。不要管他,直接点确定就可以了。
1.如果你的是直接以@gmail.com结尾的邮箱只需要把SMTP username换成你自己的,在SMTP password中输入你的Gmai邮箱密码就可以了。
Send e-mail via GMail? 【是否使用Gmail服务器】勾选 SMTP host 【邮件发送服务器主机】 <程序自动设置> smtp.gmail.com SMTP port【邮件发送服务器端口号】 <程序自动设置> 465 Secure connection prefix 【安全类型】 <程序自动设置> SSL Use SMTPAuth? 【是否自动设置发送邮件服务器帐户】<程序自动设置> 勾选 SMTP username 【邮件发送服务器用户名】 <您的Gmail地址> 必须带Gmail后缀的邮箱 SMTP password 【邮件发送服务器密码】<您的Gmail密码> 上面邮箱的密码
2.如果你跟我一样用了Google Apps,你在这里可以选择使用Google Apps的邮箱。
Send e-mail via GMail? 【是否使用Gmail服务器】勾选 SMTP host 【邮件发送服务器主机】 <注意修改>smtp.google.com SMTP port【邮件发送服务器端口号】 <程序自动设置> 465 Secure connection prefix 【安全类型】 <程序自动设置> SSL Use SMTPAuth? 【是否自动设置发送邮件服务器帐户】<程序自动设置> 勾选 SMTP username 【邮件发送服务器用户名】 <您的Google Apps地址> 邮箱全名,例如我的username@nicky605.com SMTP password 【邮件发送服务器密码】<您的Google Apps地址> 上面邮箱的密码
上面两项是可以直接使用可以正常收发邮件的Gmail帐户(发出去的邮件不会存到Google服务器上),当然按照理论来讲用QQ、网易或是Hotmail企业邮箱的甚至是普通的邮箱只要输入正确的STMP Host、STMP port、STMP username ?STMP password、 不必勾选“Send e-mail via GMail? ?”但前提是存在并能够正常收发邮件的mail帐户。
3.不勾选“Send e-mail via GMail? ?”,使用您Wordpress主机的邮件服务器
Send e-mail via GMail? 【是否使用Gmail服务器】 不勾选 SMTP host 【邮件发送服务器主机】 localhost 或是Cpanel提供 SMTP port【邮件发送服务器端口号】 25 Secure connection prefix 【安全类型】 空 Use SMTPAuth? 【是否自动设置发送邮件服务器帐户】不勾选 SMTP username 【邮件发送服务器用户名】 空 SMTP password 【邮件发送服务器密码】空
Wordwrap length(邮件长度)Sender e-mail【显示外发邮箱名】基本上可以不用添,而且貌似我试过了Sender e-mail添了也不起作用,不知道是不是BUG,如果您设置成功了请告诉我一声。Sender name为邮件中显示发件人的姓名。
这样邮件服务器就设置好了,最好是点最下面的Send test e-mail 【发送测试电子邮件】向您的Wordpress的当前登陆的管理员邮箱发送一封测试邮件(如果不知道是哪个请注意看我红线划去的部分)。下面开始设置邮件正文跟博客显示。
添加回复评论代码
打开后台,选择“外观”下拉菜单的“编辑选项”,选择在右侧文件列表中的functions.php,找一个*/结尾的地方,粘贴一下代码
/* 有评论时发送邮件 函数 开始*/ function comment_mail_notify($comment_id) { $admin_notify = '1'; // admin 要不要收回复通知 ( '1'=要 ; '0'=不要 ) $admin_email = get_bloginfo ('admin_email'); // $admin_email 可改为你指定的 e-mail. $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 ? get_comment($parent_id)->comment_mail_notify : '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'])); // e-mail 发出点, no-reply 可改为可用的 e-mail. $to = trim(get_comment($parent_id)->comment_author_email); $subject = '您在 [' . get_option("blogname") . '] 的留言有了回复'; $message = ' <div style="background-color:#eef2fa; border:1px solid #d8e3e8; color:#111; padding:0 15px; -moz-border-radius:5px; -webkit-border-radius:5px; -khtml-border-radius:5px;"> <p>' . trim(get_comment($parent_id)->comment_author) . ', 您好!</p> <p>您曾在《' . get_the_title($comment->comment_post_ID) . '》的留言:<br />' . trim(get_comment($parent_id)->comment_content) . '</p> <p>' . trim($comment->comment_author) . ' 给您的回复:<br />' . trim($comment->comment_content) . '<br /></p> <p>您可以点击<a href="' . htmlspecialchars(get_comment_link($parent_id)) . '">查看回复的完整內容</a></p> <p>还要再度光临 <a href="' . get_option('home') . '">' . get_option('blogname') . '</a></p> <p>(此邮件由系统自动发送,请勿回复.)</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 ); //echo 'mail to ', $to, '<br/> ' , $subject, $message; // for testing } } add_action('comment_post', 'comment_mail_notify'); /* 自动加勾选栏 */ function add_checkbox() { echo '<input type="checkbox" name="comment_mail_notify" id="comment_mail_notify" value="comment_mail_notify" checked="checked" style="margin-left:20px;" /><label for="comment_mail_notify">邮件回复您</label>'; } add_action('comment_form', 'add_checkbox'); /* 有评论时发送邮件 函数 结束*/
如果您使用的是我上面介绍的第一项与第二项,经我测试收到的回复邮件为您使用的?SMTP username中输入的邮件地址,即第一项显示的您以@gmail.com结尾的邮箱或是第二项显示的您Google Apps的邮箱地址。这个反复经我测试就是这个SMTP username中输入的邮件地址,修改上面源代码哪个地方或是修改Sender e-mail都不好使。
如果您使用的是我上面介绍的第三项,则您收到的回复邮件则是以您博客地址结尾的no-reply地址,例如我的为no-reply@blog.nicky1605.com,如果使用主域名做博客的就会是no-reply@nicky1605.com。这样当然我很是不爽,不能因为咱用的是二级域名就歧视咱,把上面的第16行修改为
$wp_email = 'no-reply@nicky1605.com'; // e-mail 发出点, no-reply 可改为可用的 e-mail. 注意修改啊,可不要直接复制粘贴我的地址啊
这样系统就不会判断你的Wordpress域名而直接使用提供的地址。
PS: 1 、第40行也可以把“邮件回复您”修改成你喜欢的显示内容。
2、仅提供自动勾选前台用户可以自动选择的代码,如果你想使用其他方式请自行搜索代码
后记
使用第一项第二项第三项都是可以的,有人可能会问第二项与修改版的第三项对于我来说不是一样的么?其实虽然经过测试收到的都是以@nicky1605.com结尾的电子邮件,但是第二项你必须要使用一个存在的E-mail地址,而第三项则是任何一个即使不存在的E-mail用户名都可以。如果你想显示一个不存在的用户名但又怕这样会丢掉邮件的话可以去Google Apps里面修改转向去,把发错的邮箱地址全都转到你的特定邮箱,不过你这样确实很蛋疼。
如果您怕以后升级主题会覆盖掉设置的话还是推荐您去用插件~
最后说一句,如果你这个人有恶搞精神的话你可以把刚才让你修改的地址随便修改成一个那个啥的地址,来欺骗一下您的读者,当然,不要乱用和滥用哦~
本文作者为Nicky,转载请注明。
还是用代码好,插件拖慢速度
@peascloud好像必须要加一个插件才可以