discuzx3.2 如何去掉注册时填的邮箱 Email地址无效问题的解决

发布时间:2015-11-20 22:18:58编辑:丝画阁阅读(1255)

网上查到的解决方案都是一样的,不过那些设置只是前提。

1,
首先在后台--全局--注册与访问--注册-"取消注册邮箱必填"选择是提交

2,

然后编辑

template\default\member\register.htm 

删除以下代码即可,如果没改过这个文件,是151-159行。也可以直接把必填项的条件判断加到这一段代码上,如下图。


按照上面二步操作,在注册页面的会不显示邮箱输入,但是提交时会提示“Email 地址无效”,原因是:如果不提交邮箱,DISCUZ会生成一个邮箱地址保存,

upload/source/class/class_member.php 612行

        if(empty($email) && $_G['setting']['forgeemail']) {
           $_GET['email'] = $email = strtolower(random(6)).'@'.$_SERVER['HTTP_HOST'];
          }

在本地运行discuz时,$_SERVER['HTTP_HOST']一般是localhost,生成的邮件地址就是 xjsixj@localhost,如果部署后网站有域名例:www.bbsks.com,则生成的邮件地址是 xjsixj@www.bbsks.com

上面生成的邮箱地址在进行用户信息保存时会验证,而验证的正则如下:

upload/uc_client/modle/user.php 92行

通过生成的地址与上面的正则比较就会发现,如果是xjsixj@localhost 肯定是通不过验证,也就会报“Email 地址无效”的错误。


这个问题没有什么修改的必要,如果实在要修改,只要对$_SERVER['HTTP_HOST']判断里面有没有(\.\w+)+,

解决方案如下,修改:

upload/source/class/class_member.php 612行

        if(empty($email) && $_G['setting']['forgeemail']) {
           $_GET['email'] = $email = strtolower(random(6)).'@'.$_SERVER['HTTP_HOST'];
          }

上面的代码换成如下:

      if(empty($email) && $_G['setting']['forgeemail']) {
          if(preg_match("/^[\w\-\.]+(\.\w+)+$/", $_SERVER['HTTP_HOST'])){
              $_GET['email'] = $email = strtolower(random(6)).'@'.$_SERVER['HTTP_HOST'];  
          }else{
            $_GET['email'] = $email = strtolower(random(6)).'@'.$_SERVER['HTTP_HOST'].'.com';
          }
        }

在网上找了一大堆还是报地址无效问题,只好自己看代码了,希望对有此问题的人有帮助,解决方案不对欢迎指教。

关键字