问题经过

当我们在用Wordpress密码找回功能及新用户注册邮件中 ,在用qq邮箱打开链接提示”您的密码重设链接无效,请在下方请求新链接。”

出现问题的原因

qq邮箱会对url中的”&”进行转义,转义之后变成了”&”,链接随之发生了改变,自然就出现了上面的问题。

解决办法

原理是wp_mail发送邮件格式默认是text格式,把wp_mail发送邮件的格式换成”text/html”的格式就可以了,修改前需要邮件的内容中的url加个a标签以便可以点击。

把以下代码插入到你的主题目录下的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 = __('有人要求重设如下帐号的密码:') . "<br/>";
	$msg .= network_site_url() . "<br/>";
	$msg .= sprintf(__('用户名:%s'), $user_login) . "<br/>";
	$msg .= __('若这不是您本人要求的,请忽略本邮件。') . "<br/>";
	$msg .= __('要重置您的密码,请打开下面的链接:') . "<br/>";
	$msg .= sprintf('<a href="%s">点击重置密码</a>', 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);

function haozhuti_set_mail_content_type()
{
	if (in_array($GLOBALS['pagenow'], array('wp-login.php', 'wp-register.php'))) {
		add_filter('wp_mail_content_type', 'haozhuti_set_html_mail_content_type');
	}
}
add_action('init', 'haozhuti_set_mail_content_type');

function haozhuti_set_html_mail_content_type()
{
	return 'text/html';
}

修改好的qq邮箱中的效果如下

发表回复

后才能评论