代码解决WordPress 电子邮件未能发送 问题

问题介绍

wordpress注册时提示注册完成,但邮箱没有收到注册邮件。重置密码提示: 电子邮件未能发送。可能原因:您的主机禁用了mail()函数。

 电子邮件未能发送。可能原因:您的主机禁用了mail()函数。

解决方法

修改wordpress主题目录下的functions.php文件(wp-content/themes/主题/functions.php),配置smtp写入以下代码,将内容自行修改为自己的smtp邮箱。

// Customize your functions
 function mail_smtp( $phpmailer ){
 $phpmailer->From = "user@example.com"; //发件人
 $phpmailer->FromName = "测试";   //发件人昵称
 $phpmailer->Host = "smtp.example.com"; //SMTP服务器地址(比如QQ是smtp.qq.com,腾讯企业邮箱是smtp.exmail.qq.com,阿里云是smtp.域名,其他自行咨询邮件服务商)
 $phpmailer->Port = 25;    //SMTP端口,常用的有25、465、587,SSL加密连接端口:465或587,qq是25,qq企业邮箱是465
 $phpmailer->SMTPSecure = ""; //SMTP加密方式,常用的有ssl/tls,一般25端口不填,端口465天ssl
 $phpmailer->Username = "user@example.com";  //邮箱帐号,一般和发件人相同
 $phpmailer->Password = '';  //邮箱密码(QQ邮箱为授权码)
 $phpmailer->IsSMTP(); //使用SMTP发送
 $phpmailer->SMTPAuth = true; //启用SMTPAuth服务
 }
 add_action('phpmailer_init','mail_smtp');

(提示:首先你的邮箱必须开启smtp功能,以QQ邮箱为例,登录QQ邮箱,在顶部位置找到“设置”,依序点击“设置”——>“账户”——>“开启服务:POP3/SMTP服务”,然后点击对应的“开启”按钮就可以了。“邮箱密码填写生成的授权码”)

QQ邮箱POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务

再次填写要找回用户名对应的邮箱,点击获取新密码。

WordPress找回密码

提示请在您的电子邮箱中检查确认链接。成功!你的邮箱中会收到一条重置密码的链接。

WordPress找回密码2

解决发送问题后又遇到个蛋疼的问题,点击激活邮件地址提示您的密码重设链接无效,请在下方请求新链接,发现原来是显的没事的wordpress在激活链接前后都加了<>,而邮箱把后面的>当成是链接的一部分了。

WordPress找回密码3

去掉红色圈住的部分即可。

避免此问题解决方法:来自http://www.ichenfei.com/solve-wordpress-cannot-sent-register-email.html

解决方法为修改目录下的wordpress的wp-login.php以及wp-includes/pluggable.php代码

wp-login.php中找到

$message .= '<' . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') . ">\r\n";

修改为

$message .= network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') . "\r\n";

wp-includes/pluggable.php中找到

$message .= '<' . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user->user_login), 'login') . ">\r\n\r\n";

改为

$message .= network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user->user_login), 'login') . "\r\n\r\n";

如果wordpress代码不改正的话每次都的修改。

关于找回密码的错误google了以下还有种方法就是修改主题目录下的functions.php文件

加上

function reset_password_message( $message, $key ) {
 if ( strpos($_POST['user_login'], '@') ) {
 $user_data = get_user_by('email', trim($_POST['user_login']));
 } else {
 $login = trim($_POST['user_login']);
 $user_data = get_user_by('login', $login);
 }
 $user_login = $user_data->user_login;
 $msg = __('有人要求重设如下帐号的密码:'). "\r\n\r\n";
 $msg .= network_site_url() . "\r\n\r\n";
 $msg .= sprintf(__('用户名:%s'), $user_login) . "\r\n\r\n";
 $msg .= __('若这不是您本人要求的,请忽略本邮件,一切如常。') . "\r\n\r\n";
 $msg .= __('要重置您的密码,请打开下面的链接:'). "\r\n\r\n";
 $msg .= network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') ;
 return $msg;
 }
 add_filter('retrieve_password_message', reset_password_message, null, 2);