WP插件之WP-Thread-Comment的不足
WordPress Thread Comment: 允许用户回复某个特定的评论并集中显示相似评论, 可以自由选择是否使用ajax. 作者: 偶爱偶家
最近在使用中发现邮件通知功能尚有不足之处, 如下:
经插件作者提示, 邮件不能发出的真因是由于163的邮箱要验证发信人, 如果configure smtp的设置的发信人和163设置的发信人不同, 就会导致TC不能发信给评论者.. 如此, 问题解决了. 以下的内容就当是学习一下WP的mail函数吧!
由于很多的虚拟空间都是WIN主机, 所以不支持WP默认的邮件发送功能. (以下内容引用自Crazy Loong的文章<让 WordPress 通过 SMTP 发送邮件>)
为什么邮件无法发送呢?WordPress 默认的发送邮件的方式是使用 PHP 中的 mail() 函数,而mail()函数使用的确是 *nix 的Sendmail。大多数无法发送邮件的原因就在于此。可想而知,国内广大的WIN主机用户是多么的憋闷。 难道就素手无策了?当然不是了,事情总有解决的方法。感谢伟大的 PHPer 们,因为我们有 PHPMailer (介绍见这里)。更令我们高兴的事儿是 WordPress 已经集成了 PHPMailer ,有经验的 WPer 可以直接修改 wp_mail() 函数,将其发送方式修改成 SMTP 方式(具体方法请自行查阅)。
所以我使用了Crazy推荐的Configure SMTP这款插件, 备置一切正常, 当有人回复日志时会立即通知我. 同时我还使用了评论插件 WP-Thread-Comment, 它有个功能是通过发Email让评论者收到博主的最新回复通知. 怎么测试都不成功, 分析代码如下:
@wp_mail($parent_email, $mail_subject, $mail_message, $mail_headers);
unset($mail_subject,$parent_email,$mail_message, $mail_headers);
PHP里就只有调用了wp_mail函数, 所以正常我们是不能用的, 而Configure SMTP插件使用的是PHPMailer类, 所以作者偶爱偶家说他备置好Configure SMTP插件就可以正常使用, 真是有点难以置信, 我猜他可能是误解我的意思了.
由于才接触PHP, 一些方法还不熟悉, BAIDU找到了一位牛小哥, 通过他的文章WP-DB-Backup使用PHPMailer发送备份邮件我想应该用同一个原理也是可以实现的, 所以留言请他帮忙修改了下代码, 果不其然, 成功了.. 增加代码如下:
/**
* Sends the backed-up file via email
* @param string $to
* @param string $subject
* @param string $message
* @return bool
*/
function send_mail( $to, $subject, $message, $headers) {
global $phpmailer;extract( apply_filters( 'wp_mail', compact( 'to', 'subject', 'message', 'headers' ) ) );
if ( !is_object( $phpmailer ) || ( strtolower(get_class( $phpmailer )) != 'phpmailer' ) ) {
if ( file_exists( ABSPATH . WPINC . '/class-phpmailer.php' ) )
require_once ABSPATH . WPINC . '/class-phpmailer.php';
if ( file_exists( ABSPATH . WPINC . '/class-smtp.php' ) )
require_once ABSPATH . WPINC . '/class-smtp.php';
if ( class_exists( 'PHPMailer') )
$phpmailer = new PHPMailer();
}// try to use phpmailer directly (WP 2.2+)
if ( is_object( $phpmailer ) && ( strtolower(get_class( $phpmailer )) == 'phpmailer' ) ) {// Get the site domain and get rid of www.
$sitename = strtolower( $_SERVER['SERVER_NAME'] );
if ( substr( $sitename, 0, 4 ) == 'www.' ) {
$sitename = substr( $sitename, 4 );
}
$from_email = 'wordpress@' . $sitename;
$from_name = 'WordPress';// Empty out the values that may be set
$phpmailer->ClearAddresses();
$phpmailer->ClearAllRecipients();
$phpmailer->ClearAttachments();
$phpmailer->ClearBCCs();
$phpmailer->ClearCCs();
$phpmailer->ClearCustomHeaders();
$phpmailer->ClearReplyTos();$phpmailer->AddAddress( $to );
$phpmailer->Body = $message;
$phpmailer->IsHTML(true);
$phpmailer->CharSet = apply_filters( 'wp_mail_charset', get_bloginfo('charset') );
$phpmailer->From = apply_filters( 'wp_mail_from', $from_email );
$phpmailer->FromName = apply_filters( 'wp_mail_from_name', $from_name );
$phpmailer->IsMail();
$phpmailer->Subject = $subject;do_action_ref_array( 'phpmailer_init', array( &$phpmailer ) );
$result = @$phpmailer->Send();
// old-style: build the headers directly
} else {
$result = @wp_mail($to, $subject, $message, $headers);
}
return $result;}
通过创建的send_mail方法来发送邮件, 如果PHPMailer出错, 还可以使用wp_mail, 很完美的修改.
$this->send_mail($parent_email, $mail_subject, $mail_message, $mail_headers);
unset($mail_subject,$parent_email,$mail_message, $mail_headers);
现在评论者已经可以正常收到我的最新回复Email通知了. 再次感谢牛小哥的热心相助, Crazy的穿针引线, 还有偶爱偶家原作者的辛苦努力, 这个插件真的是非常棒!
来一张测试成功的图片:
End.
Author: 黑白天空
Date: 11/20/2008
2008年11月20日 12:44 沙发
关键是wp_mail也是调用phpmailer的呀! 我实在搞不清楚您的问题, 我在本机没有sendmail, 然后用liteserve搭建smtp, 然后直接加上configure smtp就可以使用, 根本不需要做您的修改的。
2008年11月20日 13:19
@偶爱偶家 @偶爱偶家, 怎么如此奇怪, 我測試了很多次都是失敗的啊, 我再實驗下, 好奇怪的說~~ 我一定要找到真因!
2008年11月20日 20:26
@黑白天空 @黑白天空, 我觉得问题可能出在您的configure smtp的设置上, 很多的smtp必须验证发信人之类的, 而如果设置成了别的发信人就会出问题.
$phpmailer->From = apply_filters( ‘wp_mail_from’, $from_email );
$phpmailer->FromName = apply_filters( ‘
2008年11月20日 22:06
@偶爱偶家 @偶爱偶家, 哈哈, 真因果然如此, 感谢偶爱偶家, 很负责任, 那我这篇文章不是写错了哦.. 呵呵, 真的没有想到居然和发信人的名称有关系, 哎…气死我了!
但是我又发现另外一个Bug, 是真的Bug, 我怎么联系你.
2008年11月21日 03:31
@黑白天空 谢谢黑白,终于解决wp-db的mail问题,smtp的话,我推荐你用163的,我刚试过用163的smtp WP-Thread-Comment发信正常
2008年11月21日 08:16
@黑白天空 @黑白天空, 直接给我的邮箱发信吧, 这次留下的邮箱是真实的,
2008年11月20日 12:47 板凳
我想您可以去看看wp的代码pluggalbe.php里面的wp_mail函数, 就是采用phpmailer的
2008年11月20日 16:48 地板
我也不知道我的发出去没有
2008年11月23日 01:07
@David @David, 貌似没有吧, 我每次都没有收到你的Email…
2008年11月20日 21:54 4楼
这个东西很奇怪
2008年11月21日 12:30 5楼
原来是这样啊!怪不得换成gmail了呢!
2008年11月22日 09:07 6楼
没用过,呵呵
2008年11月23日 01:06
@jKey @jKey, 建议你快用用, 插件真的很不错哦.
2008年11月23日 14:51
@黑白天空 @黑白天空, 用上了,呵呵
2008年11月29日 15:17 7楼
这博客留言的地方很有意思!
博客皮也不错,呵呵!
2008年11月29日 15:20
@xiaorsz @xiaorsz, 过奖了, 只是比较喜欢复古的感觉
2008年11月29日 15:23
@黑白天空 @黑白天空, 回复的背景色是不是太突兀了?觉得改下的话会更有感觉些。一点点建议!!
2008年11月29日 15:26
@xiaorsz @xiaorsz, 用的是默认的CSS, 我太懒了, 不想去动它啦…再说这个插件自身已经很棒了, 至于色彩的问题, 谢谢的你建议, 现在要弄好SEO
2009年05月12日 15:44 8楼
呵呵,这个插件不错,刚刚开博就用上了。~~
2009年05月12日 16:32
@阿修 主要还要看主题, 我这个主题留言区比较宽敞, 所以看上去还不至于难看.
2009年05月12日 16:40
@黑白天空 呵呵,这个插件已经调试到我要的效果了。因为用的模版比较特殊,所以参考了你的经验分享~
插件页面很不错,给我提供了很多参考~
谢谢你~~
2009年05月12日 18:53
@阿修 网络互助是基本的blog共享精神, 能帮助的一定尽力. 你还可以通过Gtalk和我成为朋友哦
2009年10月12日 20:44 9楼
我的博客开启了这个插件却没有头像显示,这是为什么呢?请博主指点一二、
2009年10月13日 12:25
@可乐 @可乐, 我看有头像的啊, 正常.
2009年11月19日 13:14 10楼
我的博客开启了这个插件后评论时就会把侧边栏撑下来,是什么原因呢?还有点击回复的时候,评论框出现在下面被隐藏了,好郁闷,请人空帮我看看,谢谢!
2010年05月09日 21:50 11楼
来看看。