wordpress邮件功能设置及密码重置链接失效问题解决

in web with 0 comment

相信有些朋友会跟我一样,使用不了邮箱功能,具体测试方法:在站点登录页或者首页点击注册,填完注册邮箱后却收不到主站发出的邮件,另外一种情况就是"找回密码时,填了账号,客户端但是收不到邮件"

此时主站会提示"发送邮件出现问题之类的提示"  具体我当时忘记截图了。

解决方法

第一步:检查主机或者vps是否支持main() 函数

附检测mail函数是否禁用的代码

使用PHP探针来检测主机商是否禁用了mail函数。
PHP探针代码如下,保存为php文件上传到服务器打开就可以测试出来:

<?php
if (function_exists('mail')) {
echo "支持mail()函数!";
} else
echo "不支持mail()函数!";
?>

1.1如果检测到主机商禁用了mail函数,解决方法如下

function mail_smtp( $phpmailer ){
$phpmailer->From = "12345@qq.com"; //发件人
$phpmailer->FromName = "张三"; //发件人昵称
$phpmailer->Host = "smtp.qq.com"; //SMTP服务器地址
$phpmailer->Port = 25; //SMTP端口,常用的有25、465、587,具体谷歌百度
$phpmailer->SMTPSecure = ""; //SMTP加密方式,常用的有SSL/TLS,具体谷歌百度
$phpmailer->Username = "12345@qq.com"; //邮箱帐号
$phpmailer->Password = ***********; //邮箱密码(自定义)
$phpmailer->IsSMTP(); //使用SMTP发送
$phpmailer->SMTPAuth = true; //启用SMTPAuth服务
}
add_action('phpmailer_init','mail_smtp');

1.2如果支持此函数,则跳过此步骤

第二步:安装邮件插件

搜索WP-Mail-SMTP插件,安装后启用设置

1、填写你的邮箱地址,你打算用哪个邮箱发信件,如:12345@qq.com

2、填写你想显示的发件人名称,如:张三

3、不用管了Return Path

4、你选择发信邮箱的SMTP地址。不同的邮箱不一样哦(腾讯的smtp.qq. com, 163邮箱smtp.163.com 大部分都是这种格式,参照各自邮箱官方公布的SMTP地址。)

5、默认端口 25

6、第一个选项

7、第二个选项,使用SMTP验证(这个不验证是不可能发信成功的哦!)

8、登陆邮箱名,如:12345@qq.com

9、输入密码  ******   (你邮箱对应的登录密码)

第三步,测试注册账号,看能否收到邮件。一般没有问题。不过我遇到了如下要说的发送的邮件链接无法打开,提示失效

链接失效解决方法

有不少网友遇到点击wordpress密码重置链接出现“抱歉,该key似乎无效。”的错误提示,其实出现这个问题的根本原因是代码中的”>”被带进了链接,点击链接后跳转的地址变成了http://www.XXX.com/wp-login.php?action=rp&key=yQYLybNjt8sp2S1TQeO2&login=username>也就是找回密码的用户名后面多了一个“>”。

解决方法:打开根目录的wp-login.php查找wp-login.php?action=rp&key=$key&login= 出来结果中蓝色标记(即<>)的字符去掉。

$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”;

保存后重启一下php服务和web服务就可以了。

另外还有种方法我这边没测试,也贴出来吧

将下面代码添加到当前主题的functions.php文件中。
/**
    * 修复 WordPress 找回密码提示“抱歉,该key似乎无效”
    */
    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);

至此问题解决。

文章参考:https://www.tuhongwei.com/34.html

 

Responses