前提条件:后台核心设置,邮箱能够正常通信。
0、在数据库中新建一个dede_regnum 表 .
表段如下图:
![图片](https://img-blog.csdn.net/20170110091826268?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbmV0dXNlcjE5Mzc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
1、/member/templets/reg-new.htm中
1>增加如下代码:
0、在数据库中新建一个dede_regnum 表 .
表段如下图:
1、/member/templets/reg-new.htm中
1>增加如下代码:
<script language="javascript">
function sendsms(){
if(document.getElementById('email').value==''){
alert('请输入邮箱帐号!');
document.getElementById('email').focus();
return false;
}
window.open("http://www.xx.com/member/regsendnum.php?num="+document.getElementById('email').value);
}
</script>
2>找到
<li><span>电子邮箱:</span>
替换为如下代码:
<li><span>电子邮箱:</span>
<input type="text" class="intxt w200" id="email" name="email"/>
<i class="red">*</i> <em id="_email" class="red">(每个电子邮箱只能注册一个帐号,并且用于接收下方的注册码!)</em> </li>
<li><span>电子邮箱注册码:</span>
<input type="text" name="yznum" id="yznum" class="intxt w200" style="width: 80px; text-transform: uppercase;" />
<i class="red">*</i> <em id="_yznum">请点击发送邮件获取注册码</em>
<input value="发送邮件" type="button" onClick="sendsms();"/>
</li>
效果如下图:
2、在member/
reg_new.php中:
在 #api{{
if(defined('UC_API') && @include_once DEDEROOT.'/uc_client/client.php')之上增加如下代码:
//注册码核对
$time=time()-3600;//1小时前的注册码失效.
$yznum=$_POST['yznum'];
$email=$_POST['email'];
$regnum=$dsql->GetOne("SELECT * FROM `#@__regnum` WHERE email='$email' order by posttime desc limit 1");
if($regnum['num']==$yznum){
//删除一个小时前的注册码
if($dsql->GetOne("SELECT * FROM `#@__regnum` WHERE posttime<'$time'")){
$dsql->ExecuteNoneQuery("DELETE FROM `#@__regnum` WHERE posttime<'$time'");
}
}else{
ShowMsg("注册码不对!","-1");
exit();
}
3、在member下新建一个regsendnum.php文件
代码如下:
代码如下:
<?php
/**
* @version $Id: regsendnum.php 1 11:11 2013年5月6日Z jackers $
* @copyright Copyright (c) 2013, jackers, Inc.
*/
//当前文件是注册时通过邮箱注册码的功能
require_once(dirname(__FILE__)."/config.php");
require_once DEDEINC.'/membermodel.cls.php';
$num=time()*5;
$randNum =substr(md5($num),0,4);
$timestamp=time();
$email=$_GET['num'];
$time=$timestamp-60;
if($dsql->GetOne("SELECT * FROM `#@__regnum` WHERE email='$email' AND posttime>'$time'")){
ShowMsg('如果你的注册码还没有收到的话?请一分钟后再重发!','/member/index_do.php?fmdo=user&dopost=regnew');
exit;
}
//邮件验证
$mailtitle = "{$cfg_webname}--提供给你的注册码信息";
$mailbody .= "{$cfg_webname}--";
$mailbody .="提供给您的注册码是:(".$randNum.")这四位数\n";
$mailbody .= "Power by http://www.xx.com 某某网!\r\n";
$headers = "From: ".$cfg_adminemail."\r\nReply-To: ".$cfg_adminemail;
if($cfg_sendmail_bysmtp == 'Y' && !empty($cfg_smtp_server))
{
$mailtype = 'TXT';
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_webname,$cfg_smtp_usermail, $mailtitle, $mailbody, $mailtype);
}
else
{
@mail($email, $mailtitle, $mailbody, $headers);
}
//End 邮件验证
if($dsql->GetOne("SELECT * FROM `#@__regnum` WHERE email='$email'")){
$dsql->ExecuteNoneQuery("UPDATE `#@__regnum` SET `num`='$randNum',`posttime`='$timestamp' WHERE `email`='$email'");
}else{
$dsql->ExecuteNoneQuery("REPLACE INTO `#@__regnum` ( `num` , `posttime` , `email` ) VALUES ('$randNum', '$timestamp', '$email')");
}
ShowMsg('注册码信息已经成功发送到您的邮箱中,请注意查收!','/member/index_do.php?fmdo=user&dopost=regnew');
exit;
?>
4、member/templets/js/reg_new.js中:
在 if($('#vdcode').val()=="") 之上增加如下代码:
在 if($('#vdcode').val()=="") 之上增加如下代码:
if($('#yznum').val()=="")
{
$('#yznum').focus();
alert("邮箱注册码不能为空!");
return false;
}
补充:在邮箱无法发送邮件的到邮箱的时候。有些服务器做安全组策略的时候关闭了一些端口tcp、udp等导致邮件无法发送到用户的邮箱。
上面我们是把注册码存到数据库中,我们只需要让注册用户自己查询出注册码即可。
5、我们在member目录下新建一个serialnumber.htm文件
代码如下:
上面我们是把注册码存到数据库中,我们只需要让注册用户自己查询出注册码即可。
5、我们在member目录下新建一个serialnumber.htm文件
代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>会员中心 - 邮箱注册码查询</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<form action="serialnumber.php" method="post">
<input name="email" type="text" /><em style="color:#FF0000;">输入邮箱查询注册码</em>
<input type="submit" value="查询"/>
</form>
</body>
</html>
6、 我们在member目录下建立一个读取查询的serialnumber.php文件代码如下:
<?php
require_once(dirname(__FILE__)."/config.php");
/** 验证码查看 **/
$sql="select email,num from #@__regnum where email='".$email."'";
$tests = array();
$dsql->SetQuery($sql);
$dsql->Execute();
while ($row = $dsql->GetArray()) {
$tests[] = $row;
}
$dpl = new DedeTemplate();
$tpl = dirname(__FILE__)."/templets/zhuce.htm";
$dpl->LoadTemplate($tpl);
$dpl->display();
7、我们需要建立一个zhuce.htm来展示我们查询出来的注册码
代码如下:
找到:
<li><span>电子邮箱注册码:</span>
<input type="text" name="yznum" id="yznum" class="intxt w200" style="width: 80px;" /> <i class="red">*</i> <em id="_yznum">请点击发送邮件获取注册码</em> <input value="发送邮件" type="button" onClick="sendsms();"/>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>会员中心 - 邮箱注册码</title>
<style type="text/css">
body{ font-size:14px; font-family:"微软雅黑"; color:#666666; text-align:center;}
</style>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo $cfg_soft_lang; ?>" />
</head>
<body>
<table width="300" border="1">
<tr>
<td>邮箱注册码</td>
<td>邮箱</td>
</tr>
<?php foreach($tests as $ts){?>
<tr>
<td><em style="color:#FF0000;"><?php echo $ts['num']; ?></em></td>
<td><?php echo $ts['email']; ?></td>
</tr>
<?php } ?>
</table>
</body>
</html>
8、我们的注册页面需要增加代码如下:找到:
<li><span>电子邮箱注册码:</span>
<input type="text" name="yznum" id="yznum" class="intxt w200" style="width: 80px;" /> <i class="red">*</i> <em id="_yznum">请点击发送邮件获取注册码</em> <input value="发送邮件" type="button" onClick="sendsms();"/>
在之后追加如下:
<i class="red">*</i> <a href="serialnumber.htm" target="_blank">收不到注册码?请点这里</a>
9、效果如下:
<i class="red">*</i> <a href="serialnumber.htm" target="_blank">收不到注册码?请点这里</a>
9、效果如下: