原本是不想折腾的,仅仅是因为评论回复无法发送邮件而已,但一看连找回密码也说mail()函数功能被禁用就不大爽了。一开始我大概知道如果主机不支持mail函数发邮件的话 那么就可以用SMTP来代替,也知道可以用插件,只是真正找插件来配置的时候就出问题了。
问题不仅出在插件上,也出在QQ邮箱上。首先说一下三大smtp插件:

  • Configure SMTP
  • WP Mail SMTP
  • WP SMTP

三个我都试过,最不靠谱的是Configure SMTP、接着是WP SMTP。 仅仅WP Mail SMTP可以成功。相同的配置下,Configure SMTP怎么弄都会说你连接失败,WP SMTP测试说发送成功,但你不会收到邮件,只有WP Mail SMTP可以!


其次我要吐槽的是QQ邮箱,这也是耗费我最多时间的地方。如果用QQ邮箱去配置,失败率是100%的,无论你是采用25端口非加密方式,还是465端口SSL加密方式,都不行,无论你是用smtp.qq.com还是smtp.exmail.qq.com作SMTP服务器也都不行。立马换其他邮箱自家主机的、163的,100%成功! 所谓成功是指发送测试邮件成功了,找回密码也能收到邮件了。但是,评论回复还没办法发送邮件通知。


于是,找了找网上出现了另一种代码法,不奇怪,插件就是从代码拼出来的,有人从这些SMTP插件上抽了一段代码说放在function.php里面,具体可以百度,不在此赘述。提供一下代码:

add_action('phpmailer_init', 'mail_smtp');
function mail_smtp( $phpmailer ) {
$phpmailer->From = 'xxx@163.com'; // 邮件里显示出来的发件人邮箱
$phpmailer->FromName = 'xxx'; // 发件人昵称
$phpmailer->Host = 'smtp.163.com';    // SMTP服务器,这里是163的
$phpmailer->Username = 'xxx@163.com'; // 修改为你的邮箱(该邮箱必须开启SMTP服务,而且要和上面的发件人邮箱相同)
$phpmailer->Password = '******'; // 修改为你的邮箱密码,这里我用*号代替了,注意是在单引号内的。
$phpmailer->Port = 465; // 端口,非加密用25,SSL加密用465
$phpmailer->SMTPSecure = 'ssl'; // 加密方式 ssl 或 tsl(port=25则留空,465为ssl)
$phpmailer->SMTPAuth = true;
$phpmailer->IsSMTP();
}

最后,插件虽然可以成功,但还有缺陷,如果代码简单又不行。最终还可以用下面这个法子搞定,目前在WordPress 4.1下可行:
1、打开 wp根目录/wp-includes/里面的pluggable.php文件,
2、找到下面这句代码:

do_action_ref_array( 'phpmailer_init', array( &$phpmailer ) );

3、在这句代码的下面再添加以下smtp配置代码(看注释修改为自己的配置):

// 推荐使用163邮箱,他们默认的smtp服务是开启的
$phpmailer->From = 'xxx@163.com'; // 邮件里显示出来的发件人邮箱
$phpmailer->FromName = 'xxx'; // 发件人昵称
$phpmailer->Host = 'smtp.163.com';    // SMTP服务器,这里是163的
$phpmailer->Username = 'xxx@163.com'; // 修改为你的邮箱(该邮箱必须开启SMTP服务,而且要和上面的发件人邮箱相同)
$phpmailer->Password = '******'; // 修改为你的邮箱密码,这里我用*号代替了,注意是在单引号内的。
$phpmailer->Port = 465; // 端口,非加密用25,SSL加密用465
$phpmailer->SMTPSecure = 'ssl'; // 加密方式 ssl 或 tsl(port=25则留空,465为ssl)
$phpmailer->SMTPAuth = true;
$phpmailer->IsSMTP();

就这么简单即可解决smtp方式发送邮件的问题,如果要评论回复发送邮件通知,你可以参照网上的方法,添加相应的功能代码。