在discuz和phpwind等知名论坛中,都有新用户注册邮箱验证的功能,那么功能如此强大的dedecms有没有这一功能呢?回答肯定是有的,只是您不会用而已,现在看我的方法:
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 ="";
$msg .= "".$uname." 恭喜您注册成为XXXXX的会员了!
";
$msg .= " 您的登陆帐号:".$userid."
";//这里,做了个小判断,如果是企业用户注册,则给多送条信息去。
if($mtype=='企业'){
$msg .= " 活动公告:马上完善您的企业信息,免费开通3个月体验会员,享受更多无限制服务体验!
";
}
$msg .= " 注意!该验证有效期为1周,请尽快进行您的帐户验证。
";
$msg .= "还有一步您就成功了,请点击下面的链接进行最后一步验证。(如果无法点击链接,请将下面红色部分的链接地址全部复制,然后粘贴到浏览器地址中打开!)
";
$msg .= "[url]http://www.XXXXX.com/member/reg_email.php?g=ok&userid=[/url]".$userid."&u=".$keyums."
";
$msg .= "请点击打开上面的连接地址或复制到浏览器地址中打开。如需帮助,请联系XXXXX管理员!
";
$msg .= "这是一封由XXXXX网站系统自动发送的邮件,请不要回复邮件!
";
$msg .= "XXXXXX --XXXXXXXXX的门户网站。
";
$msg .= "";
$mailbody = '';
//下面这个是邮件标题,上面的是邮件正文部分。
$mailtitle = "XXXXXXXX会员注册验证邮件";
$mailbody .= "$msg /r/n/r/n";
$headers = "From: ".$cfg_adminemail."/r/nReply-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")
复制代码
OK,完成了。这里就不在演示了。
Dede新用户注册发送验证邮件的方法
在discuz和phpwind等知名论坛中,都有新用户注册邮箱验证的功能,那么功能如此强大的dedecms有没有这一功能呢?回答肯定是有的,只是您不会用而已,现在看我的方法:
1.修改/membe…
本文来自网络,不代表1号站长-站长学院|资讯交流平台立场。转载请注明出处: https://www.1cn.cc/jianzhan/jingyan/21745.html
评论列表()