20150323 PHP模拟邮件激活注册用户
2015-03-22 Lover雪儿
昨天我们实现了PHP邮件的收发功能,http://www.cnblogs.com/lihaiyan/p/4356798.html ,今天我们来实现一个模拟注册用户,并且通过给用户发送激活邮件激活账户的功能。
废话不都说,附上源码:
数据库连接php源码:
1 <?php 2 3 //链接数据库 4 5 $conn = mysql_connect('localhost','root',''); 6 7 mysql_query('use test',$conn); 8 9 mysql_query('set names utf8',$conn); 10 11 ?>
用户注册并且发送激活邮件php源码:
1 <?php 2 /* 模拟创建用户+创建激活码+发送激活码邮件 3 *邮箱用户表 4 create table mailuser ( 5 uid int primary key auto_increment, 6 uname char(20) not null default '', 7 email char(35) not null default '', 8 pass char(32) not null default '', 9 status tinyint not null default 0 10 )engine myisam charset utf8; 11 邮箱激活码 12 create table activecode( 13 cid int primary key auto_increment, 14 uname char(20) not null default '', 15 code char(16) not null default '', 16 expire int not null default 0 //激活码过期时间 17 )engine myisam charset utf8; 18 */ 19 /* 思路步骤: 20 * 1. 连接数据库 21 * 2. insert用户表 22 * 3. 随机生成激活码并insert activecode表 23 * 4. 把生成的激活码发送至注册邮件,用户激活 24 * */ 25 //1.连接数据库 26 require('./conn.php'); 27 28 //用户生成随机 激活码 字符串 29 $str = 'abcdefghijkmnpqrstuvwxyzABCDEFGHJMNPQRSTUVWXYZ23456789'; 30 31 $uname = substr(str_shuffle($str),0,8); //生成8位的随机用户名 32 $email = "1063385677@qq.com"; //激活邮件发送地址 33 34 35 //2. 模拟注册用户 36 $sql = "insert into mailuser(uname,email) values('$uname','$email')"; 37 mysql_query($sql,$conn); 38 39 40 //3. 生成激活码 41 $code = substr(str_shuffle($str),0,8); //生成8位随机用户表 42 $expire = time() + 5*24*36; //激活码5天内有效 43 44 $sql = "insert into activecode(uname,code,expire) value('$uname','$code','$expire')"; 45 mysql_query($sql,$conn); 46 47 48 //4. 发送激活邮件,把激活码发送给用户 49 require('../PHPMailer_v5.1/class.phpmailer.php'); //包含phpmailer 50 51 $phpmailer = new PHPMailer(); 52 /*设置PHPMAILER发信用的方式 53 * 可以用win下的mail()来发送 54 * 可以用linux下sengmail ,gmail来发送 55 * 可以用smtp协议登录到某个账户上来发送 56 * */ 57 $phpmailer->IsSMTP(); 58 $phpmailer->Host = 'smtp.163.com'; //设置smtp服务器 59 $phpmailer->SMTPAuth = true; //SMTP服务器是否需要认证,要登录 60 $phpmailer->Port = 25; //smtp端口 61 $phpmailer->Username = "lihaiyan1063385677"; //smtp服务器账号 62 $phpmailer->Password = "1063385677"; //smtp服务器密码 63 64 //信息设置完毕 65 //开始正式写信 66 $phpmailer->CharSet = "UTF-8"; //设置字符集 67 $phpmailer->From = "lihaiyan1063385677@163.com"; //来自 68 $phpmailer->FromName = "LoverXueEr"; //姓名 69 $phpmailer->Subject = $uname . ',点击激活邮件'; //主题 70 //开始正式写邮件内容 71 $phpmailer->Body = "please click http://localhost/foruser/PHPMailer/mail/mail_active.php?code=$code to active the acount!! Thank you!"; 72 73 //添加收件人 74 $phpmailer->AddAddress("1063385677@qq.com", "Lover雪儿"); 75 76 //发信 77 echo $phpmailer->send() ? "ok":"fail"; 78 79 80 ?>
用户激活php源码:
1 <?php 2 /* 激活用户 3 * 1.从地址栏收取激活码 4 * 2.查询该激活码, 5 * 2.1若不存在,报错 6 * 2.2激活码存在,过期,提示 7 * 2.2激活码存在,并未过期,则激活对应的用户(update user --> status = 1) 8 * 2.3把激活码的expire改为-1,激活时间修改 9 * */ 10 require('./conn.php'); 11 12 $code = $_GET['code']; 13 if(strlen($code) != 8){ 14 exit('激活码位数错误!'); 15 } 16 17 $sql = "select * from activecode where code = '$code'"; 18 echo $sql,"<br/>"; 19 $rs = mysql_query($sql,$conn); 20 $row = mysql_fetch_assoc($rs); //取结果 21 22 if(empty($row)){ 23 exit('激活码不存在!'); 24 } 25 26 if(time() > $row['expire']){ 27 exit('激活码已过期,请重新申请!'); 28 } 29 30 //走到这里,意味着激活码正常,激活用户 31 $sql = "update mailuser set status = 1 where uname = '".$row['uname']."'"; 32 mysql_query($sql,$conn); 33 34 //把此激活码作废 35 $sql = "update activecode set expire = 0 where code = '".$code."'"; 36 echo $sql; 37 mysql_query($sql,$conn); 38 39 echo "恭喜您,您已激活成功,^_^"; 40 41 ?>
测试:
1.数据库的表格(数据库的建表代码在前面已给出):
如图所示,总共两张表格,一张是用户注册的表,另一张是存储用户激活码和激活码有效时间的表。
2.模拟创建用户
运行mail_create.php,来模拟创建用户,若是创建成功,则会发送激活邮件至相应的邮箱,最后打印ok
qq提示收到邮件:
3.进入QQ邮件并激活用户
点击链接,激活,为了方便调试,我特意打印出sql语句。
4.进入MySQL中查询表中的数据
可以发现,激活成功之后,已经将status置为1,并且将激活码有效时间修改为0.
很简单吧!加油! ^_^