• 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 = "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 ?>
    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.数据库的表格(数据库的建表代码在前面已给出):

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

    2.模拟创建用户

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

    qq提示收到邮件:

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

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

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

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

    很简单吧!加油! ^_^

  • 相关阅读:
    定义Java类实现字节流转字符流
    zookeeper中的QuorumPeerMain解析
    Hadoop集群搭建(cluster setup),ssh免密后一直要求输入密码的原因
    cd .ssh返回-bash: cd: .ssh:No such file or directory怎么办
    安装jdk配置环境变量后jps command not found
    Redis简介二
    bash重定向
    Redis简介
    maven项目下pom.xml依赖报错
    《《《zTree视频学习笔记
  • 原文地址:https://www.cnblogs.com/lihaiyan/p/4359927.html
Copyright © 2020-2023  润新知