20150323 PHP模拟邮件激活注册用户

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 ?>
conn.php

用户注册并且发送激活邮件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 = "[email protected]";   //激活邮件发送地址
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 = "[email protected]";    //来自
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!!\nThank you!";    
72 
73 //添加收件人
74 $phpmailer->AddAddress("[email protected]", "Lover雪儿");
75 
76 //发信
77 echo $phpmailer->send() ? "ok":"fail";
78 
79 
80 ?>
mail_create.php

用户激活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 ?>
mail_active.php

测试:

1.数据库的表格(数据库的建表代码在前面已给出):

如图所示,总共两张表格,一张是用户注册的表,另一张是存储用户激活码和激活码有效时间的表。

20150323 PHP模拟邮件激活注册用户_第1张图片

 

2.模拟创建用户

运行mail_create.php,来模拟创建用户,若是创建成功,则会发送激活邮件至相应的邮箱,最后打印ok

20150323 PHP模拟邮件激活注册用户_第2张图片

qq提示收到邮件:

20150323 PHP模拟邮件激活注册用户_第3张图片

 

3.进入QQ邮件并激活用户

20150323 PHP模拟邮件激活注册用户_第4张图片

点击链接,激活,为了方便调试,我特意打印出sql语句。

20150323 PHP模拟邮件激活注册用户_第5张图片

 

4.进入MySQL中查询表中的数据

20150323 PHP模拟邮件激活注册用户_第6张图片

可以发现,激活成功之后,已经将status置为1,并且将激活码有效时间修改为0.

 

 

很简单吧!加油! ^_^

 

你可能感兴趣的:(PHP)