解决WordPress无法发送邮件和链接点击无效

1、解决mail()函数被禁用,WordPress无法发送邮件

在一些虚拟主机由于mail()函数被禁用,导致WordPress无法发送邮件,出现下面情况:

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

可以在主题的function.php添加如下代码解决

//修复WordPress邮件发送,以QQ邮箱为例
function mail_smtp( $phpmailer ) {
    $phpmailer->FromName = 'AweiG点看'; //名字
    $phpmailer->Host = 'smtp.qq.com'; //smtp地址,可以到你使用的邮件设置里面找
    $phpmailer->Port = 465; //端口,一般不用修改
    $phpmailer->Username = '123456@qq.com';  //邮件账号
    $phpmailer->Password = 'jbjie'; //邮件密码
    $phpmailer->From = '123456@qq.com';//邮件账号  
    $phpmailer->SMTPSecure = 'ssl'; //tls or ssl (port=25留空,465为ssl)一般不用修改
    $phpmailer->SMTPKeepAlive = true;
    $phpmailer->SMTPAuth = true;    
    $phpmailer->IsSMTP();
}
add_action('phpmailer_init', 'mail_smtp');

2、解决WordPress重置邮件链接点击无效

这本应该不是什么问题,WordPress为了邮件链接突出点,使用了“<>”把链接包住,但在邮件被解析了,点击链接后出现下面情况:

您的密码重设链接无效,请在下方请求新链接

可以在主题的function.php添加如下代码解决

//修复WordPress您的密码重设链接无效
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 = __('Someone has requested a password reset for the following account:'). "\r\n\r\n";
    $msg .= network_site_url() . "\r\n\r\n";
    $msg .= sprintf(__('Username: %s'), $user_login) . "\r\n\r\n";
    $msg .= __('If this was a mistake, just ignore this email and nothing will happen.') . "\r\n\r\n";
    $msg .= __('To reset your password, visit the following address:'). "\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);

以上代码只解决了重置密码链接的问题,新用户注册获取密码的邮件链接依然存在。

解决办法:

打开WP安装目录下的/wp-includes/pluggable.php,找到如下代码(1741行左右)

$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和主题升级后覆盖,所以比较麻烦

3、使用插件解决无法发送邮件和链接点击无效的问题

上面两个问题使用插件可以得到很好的解决,这里推荐使用两个插件:

a. Easy WP SMTP

从你的WordPress博客通过SMTP发送电子邮件。解决mail()函数被禁用,WordPress无法发送邮件的问题

b. WP Better Emails

美化默认文本/普通WP邮件到完全可定制的HTML电子邮件。解决WordPress重置和获取密码邮件链接点击无效的问题



Mjiong君

爱生活,爱技术,爱分享

You may also like...

发表评论

电子邮件地址不会被公开。 必填项已用*标注