• [织梦吧]唯一域名:www.dedecms8.com,织梦DedeCMS学习平台.

当前位置: > DedeCMS教程 > DedeCMS安装使用 >

dedecms注册新用户发送邮件验证修改方法

来源: www.dedecms8.com 编辑:织梦吧 时间:2011-08-07点击:

1.修改/member/reg_new.php文件
查找
$dsql->ExecuteNoneQuery($infosquery);

在下面插入代码:
 
//写入邮件验证内容
  $keyums = md5($userid.$email."dedecmslove"); //这里的7就是有效期7天的时间。上面的dedecmslove就是给发送的URL加密用的KEY
  $emldatetime = time()+7*24*3600;
  $emailyz = "INSERT INTO `dede_sj_emailyz`(`userid`,`keyums`,`datetime`)
                  VALUES (\'{$userid}\',\'{$keyums}\',\'{$emldatetime}\'); ";
  $dsql->ExecuteNoneQuery($emailyz);

 接下来找到
 
//----------------------------------------------
  //模拟登录
  //---------------------------

这段,在上面插入代码
 


//发送验证邮件
  if($cfg_md_mailtest==\'Y\')
  {
    $msg ="<html><head></head><body>";
    $msg .= "<b><font color=\'#ff0000\'>".$uname."</font></b> 恭喜您注册成为XXXXX的会员了!<br>";
    $msg .= "   您的登陆帐号:<b>".$userid."</b><br><br>";//这里,做了个小判断,如果是企业用户注册,则给多送条信息去。
  if($mtype==\'企业\'){
    $msg .= "   活动公告:<b><font color=\'#ff0000\'>马上完善您的企业信息,免费开通3个月体验会员,享受更多无限制服务体验!</font>& lt;/b><br>";
 }
    $msg .= "   注意!该验证有效期为1周,请尽快进行您的帐户验证。<br>";
    $msg .= "还有一步您就成功了,请点击下面的链接进行最后一步验证。(如果无法点击链接,请将下面红色部分的链接地址全部复制,然后粘贴到浏览器地址中打开!)<br><br>";
    $msg .= "<a href=\'http://www.XXXXX.com/member/reg_email.php?g=ok&userid=".$userid."&u=".$keyums."\' target=_blank><font color=\'#FF0000\'>[url]http://www.XXXXX.com/member/reg_email.php?g=ok&userid=[/url]".$userid."&u=".$keyums."</font></a><br><br>";
   
    $msg .= "请点击打开上面的连接地址或复制到浏览器地址中打开。如需帮助,请联系XXXXX管理员!<br><br><br>";
    $msg .= "<span style=\'font-size:12px; color:#CCCCCC\'>这是一封由XXXXX网站系统自动发送的邮件,请不要回复邮件!</span><br>";
    $msg .= "<a href=http://www.XXXXXXX.com/>XXXXXX</a> <span style=\'font-size:12px; color:#CCCCCC\'>--XXXXXXXXX的门户网站。</span><br>";
    $msg .= "</body></html>";
    $mailbody = \'\';
    //下面这个是邮件标题,上面的是邮件正文部分。
    $mailtitle = "XXXXXXXX会员注册验证邮件";
    $mailbody .= "$msg rnrn";
   
   $headers = "From: ".$cfg_adminemail."rnReply-To: ".$cfg_adminemail;
   
   if($cfg_sendmail_bysmtp == \'Y\' && !empty($cfg_smtp_server))
   //下面这里选择HTML网页方式发送,如果邮箱不支持HTML,就改为TXT,不过现在好像都支持HTML了吧。
    $mailtype = \'HTML\';
 require_once(DEDEINC.\'/mail.class.php\');
    $smtp = new smtp($cfg_smtp_server,$cfg_smtp_port,true,$cfg_smtp_usermail,$cfg_smtp_password);
    $smtp->debug = false;
    $smtp->sendmail($email, $cfg_smtp_usermail, $mailtitle, $mailbody, $mailtype);
    
   }
   else
   {
    @mail($email, $mailtitle, $mailbody, $headers);
   }
    ShowMsg("恭喜您注册成为XXXXXXXXXX的会员了,现在需要对您的电子邮件( ".$email." )进行验证(有效期1周),请登陆您的邮箱查收!如果无法查收到邮件,请马上联系管理员!","index.php",0,20000);
   exit();
  }


最后修改下面的代码:
 
//----------------------------------------------
  //模拟登录
  //---------------------------
  //$ml = new MemberLogin(7*3600);
  //$rs = $ml->CheckUser($userid,$userpwd);
  //ShowMsg("注册成功,3秒钟后转向系统主页...","index.php",0,2000);
  //exit();

把这个自动登陆给注释掉,要不刚才邮件验证白费了。哈哈。不过他也跑不到这一步。


2.写个邮件验证的文件吧。代码全贴出来了。 保存为 member文件夹下面 reg_email.php文件
 


<?php
require_once(dirname(__FILE__)."/config.php");

if(!isset($userid))
{
 $userid = \'\';
}if($g==\'ok\')
{
 $userid = trim($userid);
 $keyums = trim($u);
 $logintimes = time();
 
 //检测会员帐号是否存在
 $row = $dsql->GetOne("Select id From `dede_sj_emailyz` where userid=\'$userid\' and datetime>\'$logintimes\' ");
 if(!is_array($row))
 {
  ShowMsg("对不起!您已经通过邮件验证了,或者您的验证有效期已过!","-1");
  exit();
 
  
   
 $updatembs = "Update `dede_member` set rank=\'10\' where userid=\'$userid\';";
 $dsql->ExecuteNoneQuery($updatembs);
 if($dsql->ExecuteNoneQuery($updatembs))
 {
 $dsql->ExecuteNoneQuery("Delete From `dede_sj_emailyz` where userid=\'$userid\' ");
 }else{
  ShowMsg("对不起!您的帐户异常,请联系管理员为您处理!","-1");
  exit();
  


  ShowMsg("验证成功,6秒钟后转向系统主页...","index.php",0,5000);
  exit();
 }
 else
 {
  ShowMsg("验证失败,请检查资料是否有误或与管理员联系!","-1");
  exit();
}?>

 

3.把数据表贴出来咯。
 

 

-- Table "dede_sj_emailyz" DDLCREATE TABLE `dede_sj_emailyz` (
  `id` mediumint(8) unsigned NOT NULL auto_increment,
  `userid` char(20) character set gbk NOT NULL,
  `keyums` varchar(100) NOT NULL,
  `datetime` int(10) unsigned NOT NULL default \'0\',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=358 DEFAULT CHARSET=latin1;


最后大家需要在登陆的地方判断下,免得验证白费了。
4.修改/member/index_do.php这个文件。因为我的有程序整合和二次开发,所以代码和大家都不一样。就不贴全部,给个提示。不过判断是否验证部分代码是全的。
 


if($rs == 0)
  {
   ShowMsg("用户名不存在!","-1",0,2000);
   exit();
  }
  else if($rs == -1) {
   ShowMsg("密码错误!","-1",0,2000);
   exit();
  }

大家先找到这部分代码,看到了没有啊?嘿嘿,没看到我就没办法了。

找到了,接着看我的代码,大家看着改,注意括号咯!
我的代码就是从这开始,一直到最底下有个
//退出登录
 else if($dopost=="exit")
这部分结束的。
 


 if($rs == 0)
  {
   ShowMsg("用户名不存在!","-1",0,2000);
   exit();
  }
  else if($rs == -1) {
   ShowMsg("密码错误!","-1",0,2000);
   exit();
  }
  else if($rs == -2) {
   ShowMsg("管理员帐号不允许从前台登录!","-1",0,2000);
   exit();
  }
  else
  {
  //验证邮件
  $rowemail = $dsql->GetOne("SELECT `rank` FROM dede_member WHERE userid=\'$userid\' ");
  if($rowemail[\'rank\']==\'0\') {
   $ucsynlogin = uc_user_synlogout();
   $cfg_ml->ExitCookie();

   ShowMsg("您还未通过邮件验证,无法登陆!","-1",0,2000);
   exit();
  }
   if(empty($gourl) || eregi("action|_do",$gourl))
   {
    ShowMsg("成功登录,5秒钟后转向系统主页...","index.php",0,2000);
   }
   else
   {
    ShowMsg("成功登录,现在转向指定页面...",$gourl,0,2000);
   }
   exit();
  }
 } //退出登录
 else if($dopost=="exit")


注意,如果你没有什么太多整合或二次开发的话,可以直接复制上面的代码都替换下(我的这段代码和UCenter整合了。所以如果你的没有整合他的话,记住看下面的。)

我贴出来的代码中找到
 
  $ucsynlogin = uc_user_synlogout();

把他可以去掉,如果你没有和UCenter整合的话。
 这个数据表,不知道SQL的,可以自己找个MYSQL软件或PHPMYADMIN建立下吧。我的表名叫dede_sj_emailyz

About D8

  • ©2014 织梦吧(d8) DedeCMS学习交流平台
  • 唯一网址 www.DedeCMS8.com 网站地图
  • 联系我们 1170734538@qq.com ,  QQ