解决WordPress注册收不到邮件的问题

发现wp注册时用户完成注册,但邮箱没有收到注册邮件。查看了mail()函数。后来不想改代码,想用插件来着,可是都不能用,如果重置密码提示: 电子邮件未能发送。可能原因:您的主机禁用了mail()函数。所以还是老老实实改代码吧

给大家一个检测mail函数是否禁用

使用PHP探针来检测主机商是否禁用了mail函数。

1.PHP探针代码如下,保存为php文件上传到服务器打开就可以测试出来:

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

2.直接发送看看

  1. <?php
  2. $txt = "hello";
  3. // 以下的邮箱地址改成你的
  4. $mail = "somebody@example.com";
  5. // 发送邮件
  6. mail($mail"My subject"$txt);
  7. echo "message was sent!";
  8. ?>

解决方法

修改你现在用的主题,在里面找到functions.php文件,然后在最后添加配置smtp代码

写入以下代码,将内容自行修改为自己的smtp邮箱

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

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

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

wp-login.php中找到

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

修改为

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

wp-includes/pluggable.php中找到

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

修改为

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

还有关于找回密码的错误修正,还是在你现在用的主题,在里面找到functions.php文件,然后在最后添加

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

您可以选择一种方式赞助本站

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: