最近还有小伙伴对wordpress发件功能无效果而忧心的,没关系,我刚开始也是没效果,后来多折腾折腾就好了,就喜欢折腾有什么办法?哈哈,不废话了。大家都知道,目前发邮件有两种方式:一种是wp默认的mail函数方式(sendmail)发邮件,这个是wp默认的,但很多用户使用的虚拟主机都禁用了mail函数以至于网站无法发邮件(注册用户、找回密码等一些操作都需要发送邮件),没关系,还有一种方式就是较先进而又有效率的smtp方式。(我反正是能不用插件就不用插件,所以也没有插件教程)

一、主机开启fsockopen函数

首先,如果你的是虚拟主机的话,去主机控制台将 PHP.ini 设置中将fsockopen函数启用,如下图:

WordPress无插件实现邮箱SMTP发件功能

二、拥有一个smtp功能的邮箱

其次,我以126邮箱为演示邮箱。要把邮箱的smtp的服务打开,smtp服务设置在(设置——帐户设置——POP3/SMTP/IMAP服务 下两个全勾上),保存OK。如下图:

 

WordPress无插件实现邮箱SMTP发件功能

然后会提示设置客户端授权码,这个授权码就相当于在wordpress上需要填写的“邮箱密码”(P.S.这个授权码并不是邮箱登录密码,最好不要重复

WordPress无插件实现邮箱SMTP发件功能

三、添加代码实现smtp邮件功能

开启了邮箱的smtp服务,下面就是配置wordpress了。这里是比较关键的地方,其他的主题不清楚是什么样的,如果跟本博一样使用的 Scilper 系列主题,直接将以下代码插入到主题的functions.php 最下方即可(functions.php最下方有集成的 评论邮件回复代码 ,粘到最下方即可!);其他主题应该也是类似(将下面代码添加到functions.php最后的 ?>  前面):

/*
 * WordPress无插件使用SMTP发送邮件并修改发件人名称
 */
function mail_smtp( $phpmailer ) {
$phpmailer->IsSMTP();
$phpmailer->SMTPAuth = true; //启用SMTPAuth服务
$phpmailer->Port = 465; //MTP邮件发送端口,这个和下面的对应,如果这里填写25,则下面为空白
$phpmailer->SMTPSecure ="ssl"; //是否验证 ssl,这个和上面的对应,如果不填写,则上面的端口须为25
$phpmailer->Host = "smtp.126.com"; //邮箱的SMTP服务器地址,如果是QQ的则为:smtp.exmail.qq.com
$phpmailer->Username = "admin@126.com"; //你的邮箱地址
$phpmailer->Password ="********"; //你的邮箱授权密码(有的是登录密码)
}
add_action('phpmailer_init', 'mail_smtp');
//下面这个很重要,需跟上面smtp邮箱一致才行
function ashuwp_wp_mail_from( $original_email_address ) {
return 'skillcat@126.com';
}
add_filter( 'wp_mail_from', 'ashuwp_wp_mail_from' );
//修改WordPress发送邮件的发件人
function new_from_name($email){
$wp_from_name = get_option('blogname');
return $wp_from_name;
}
add_filter('wp_mail_from_name', 'new_from_name');

特别注意端口和协议一定要对应。(P.S.如果使用25端口还是无效果,还是开启ssl吧,最新的好像需要开启加密!)简单搞定,然后保存即可。发个邮件试试效果吧!


附上邮件评论样式源码:

/*
* 评论邮件回复
*/
function comment_mail_notify($comment_id){
$mail_user_name = akina_option('mail_user_name') ? akina_option('mail_user_name') : 'poi';
$comment = get_comment($comment_id);
$parent_id = $comment->comment_parent ? $comment->comment_parent : '';
$spam_confirmed = $comment->comment_approved;
if(($parent_id != '') && ($spam_confirmed != 'spam')){
$wp_email = $mail_user_name . '@' . 'email.' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME']));
$to = trim(get_comment($parent_id)->comment_author_email);
$subject = '你在 [' . get_option("blogname") . '] 的留言有了回应';
$message = '
<table border="1" cellpadding="0" cellspacing="0" width="600" align="center" style="border-collapse: collapse; border-style: solid; border-width: 1;border-color:#ddd;">
<tbody>
<tr>
<td>
<table align="center" border="0" cellpadding="0" cellspacing="0" width="600" height="48" >
<tbody><tr>
<td width="100" align="center" style="border-right:1px solid #ddd;">
<a href="'.home_url().'/" target="_blank">'. get_option("blogname") .'</a></td>
<td width="300" style="padding-left:20px;"><strong>您有一条来自 <a href="'.home_url().'" target="_blank" style="color:#6ec3c8;text-decoration:none;">' . get_option("blogname") . '</a> 的留言回复!</strong></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td style="padding:15px;"><p><strong>' . trim(get_comment($parent_id)->comment_author) . '</strong> 同学, 您好!</span>
<p>您在《' . get_the_title($comment->comment_post_ID) . '》的留言为:</p><p style="border-left:3px solid #ddd;padding-left:1rem;color:#999;">'
. trim(get_comment($parent_id)->comment_content) . '</p><p>
' . trim($comment->comment_author) . ' 给您的回复:</p><p style="border-left:3px solid #ddd;padding-left:1rem;color:#999;">'
. trim($comment->comment_content) . '</p>
<center ><a href="' . get_permalink($comment->comment_post_ID) . '" target="_blank" style="background-color:#6ec3c8; border-radius:10px; display:inline-block; color:#fff; padding:15px 20px 15px 20px; text-decoration:none;margin-top:20px; margin-bottom:10px;">点击查看完整内容</a></center>
<center><p style="font-size:0.8rem; color:#999;">(此邮件由系统自动发出,请勿直接回复)</p></center>
</td>
</tr>
<tr>
<td align="center" valign="center" height="38" style="font-size:0.8rem; color:#999;">Copyright © '.get_option("blogname").'</td>
</tr>
</tbody>
</table>';
$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');

技术成就梦想,细节成就品质。