北极寒流 » 网络资源 » wordpress无法发送电子邮件,可能原因:您的主机禁用了mail()函数解决办法 - 2014.12.07

wordpress无法发送电子邮件,可能原因:您的主机禁用了mail()函数解决办法

最近有博客注册用户忘记登录密码,然后希望通过邮件找回,但是却一直收不到邮件,提示无法发送电子邮件,可能原因:您的主机禁用了mail()函数。不过查看服务器设置,mail()函数是正常的。却不明原因的出现邮件无法发送的情况,只好启用SMTP发送邮件来代替原来的mail函数

在这里分享测试能用的SMTP邮箱设置代码(示例为163邮箱设置),丢进 functions.php 就行了。

function mail_smtp( $phpmailer ){
$phpmailer->From = "admin@163.com"; //发件人
$phpmailer->FromName = "中国好网址"; //发件人昵称
$phpmailer->Host = "smtp.163.com"; //SMTP服务器地址
$phpmailer->Port = 25; //SMTP端口,常用的有25、465、587,具体谷歌百度
$phpmailer->SMTPSecure = ""; //SMTP加密方式,常用的有SSL/TLS,具体谷歌百度
$phpmailer->Username = "admin@163.com"; //邮箱帐号
$phpmailer->Password = '你的邮箱密码'; //邮箱密码
$phpmailer->IsSMTP(); //使用SMTP发送
$phpmailer->SMTPAuth = true; //启用SMTPAuth服务
}
add_action('phpmailer_init','mail_smtp');
加入上述代码,然后通过邮件重置密码的的就可以收到邮件了
附检测mail函数是否禁用的代码

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

<?php
if (function_exists('mail')) {
echo "支持mail()函数!";
} else
echo "不支持mail()函数!";
?>
不过后来又发现点问题,在邮箱中点击重置密码的链接出现“抱歉,该key似乎无效。”的提示。出现这个问题,据说是wordpress的bug,解决办法:
依然是在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);
07

wordpress无法发送电子邮件,可能原因:您的主机禁用了mail()函数解决办法

分享到: