panjinyou 发表于 2022-10-4 16:40:20

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

网上查到的解决方案都是一样的,不过那些设置只是前提。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';
          }
      }
在网上找了一大堆还是报地址无效问题,只好自己看代码了,希望对有此问题的人有帮助,解决方案不对欢迎指教。
页: [1]
查看完整版本: discuzx3.2 如何去掉注册时填的邮箱 Email地址无效问题的解决