php实现邮箱激活功能

一、样例

二、文件结构

其中swiftmailer-master是第三方插件,用来发验证邮件

三、核心代码

doAction.php 响应页面

 <?php
header("content-type:text/html;charset=utf-8;");
require_once 'config/config.php';
require_once 'functions/common.func.php';
require_once 'functions/mysql.func.php';
require_once 'swiftmailer-master/lib/swift_required.php';
$link = connect3();//数据库的连接
$table = "51zxw_user";//表名字
$act = $_REQUEST['act'];
$username = $_REQUEST['username'];
$password = md5($_REQUEST['password']); switch ($act){
case 'reg':
// echo '注册成功!';
//关闭事物的自动提交
mysqli_autocommit($link, false);
//得到当前时间
$regTime = time();
//得到邮箱
$email = $_POST['email'];
//生成一个token
$token = md5($username.$password.$regTime);
//生成一个token的过期时间
$token_exptime = $regTime+24*3600;//表示一天以后过期
//插入数据
$data = compact('username','password','email','regTime','token','token_exptime');
$res = insert($link, $data, $table);
//调用第三方的库发送邮件
//创建一个transport对象,确定发送到哪个邮箱
$transport = Swift_SmtpTransport::newInstance("smtp.sina.com",25);
//账号名
$transport->setUsername('clivelyn@sina.com');
//密码
$transport->setPassword('lin123');
//创建一个发送邮箱的对象
$mailer = Swift_Mailer::newInstance($transport);
//发送邮件要有发送人,要有标题,要有邮件主体
//发送邮件信息对象
$message = Swift_Message::newInstance();
//谁来发送
$message->setFormat(array('clivelyn@sina.com'));
//发送到哪里,谁注册,我发送到谁那里
$message->setTo($email);
//设置主题
$message->setSubject('注册账号激活邮箱');
//邮件中的链接
$activeStr = "?act=active&username={$username}&token={$token}";
$url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].$activeStr;
//设置邮件的正文内容
//链接已经成功,url再加密
$urlEncode = urlencode($url);
// echo $urlEncode;
$emailBody = <<<EOF
欢迎{$username}使用账号激活功能,请点击连接激活账号:
<a href="{$url} target="_blank">{$urlEncode}</a><br/>
(该链接在24小时内有效) 如果上面不是链接形式,请将地址复制到您的浏览器(例如IE)的地址栏再访问。 EOF; //真正的发送
$message->setBody($emailBody,'text/html','utf-8');
try {
$res1 = $mailer->send($message);
if($res && $res1){
mysqli_commit($link);
mysqli_autocommit($link,true);
alertMes("注册信息,请激活使用", "index.php");
}
}catch (Swift_ConnectionException $e){
//echo $e;
die('邮件服务器错误:').$e->getMessage();
} break;
case 'active'://激活功能
// echo '激活成功!';
$token = $_GET['token'];
//因为要进行转义
$username = mysqli_real_escape_string($link, $username);
//sql语句
$query = "select id,token_exptime from {$table} where username='{$username}'";
//mysqli的查询语句
$user = fetchOne($link, $query);
if($user){
$now = time();
$token_exptime = $user['token_exptime'];
//判断是否激活过期
if($now>$token_exptime){//过期
delete($link, $table,"username={$username}");
alertMes("激活码过期,请重新注册", "index.php");
}else{//激活,把status改为1就好
$data = array('status'=>1);
$res = update($link, $data, $table);
if($res){//激活成功
alertMes("激活成功", "index.php");
}else{
alertMes("激活失败,请重新激活", "index.php");
}
}
}else{
alertMes("激活失败,没有找到要激活的用户", 'index.php');
}
break;
}
echo "<br/>你好";

工具函数

mysql.fun.php  封装的mysqli的工具

 <?php
/**
* 连接
* @param string $host
* @param string $user
* @param string $password
* @param string $charset
* @param string $database
* @return object 连接标识符
*/
function connect1($host,$user,$password,$charset,$database) {
$link = mysqli_connect ( $host, $user, $password ) or die ( '数据库连接失败<br/>ERROR ' . mysqli_connect_errno () . ':' . mysqli_connect_error () );
mysqli_set_charset ( $link, $charset );
mysqli_select_db ( $link, $database ) or die ( '指定数据库打开失败<br/>ERROR ' . mysqli_errno ( $link ) . ':' . mysqli_error ( $link ) );
return $link;
}
/**
* 连接 需要传递数组
* @param array $config
* @return object
*/
function connect2($config) {
$link = mysqli_connect ( $config ['host'], $config ['user'], $config ['password'] ) or die ( '数据库连接失败<br/>ERROR ' . mysqli_connect_errno () . ':' . mysqli_connect_error () );
mysqli_set_charset ( $link, $config ['charset'] );
mysqli_select_db ( $link, $config ['dbName'] ) or die ( '指定数据库打开失败<br/>ERROR ' . mysqli_errno ( $link ) . ':' . mysqli_error ( $link ) );
return $link;
}
/**
* 用常量的形式建立连接
* @return unknown
*/
function connect3(){
$link = mysqli_connect ( DB_HOST, DB_USER, DB_PWD ) or die ( '数据库连接失败<br/>ERROR ' . mysqli_connect_errno () . ':' . mysqli_connect_error () );
mysqli_set_charset ( $link, DB_CHARSET );
mysqli_select_db ( $link, DB_DBNAME ) or die ( '指定数据库打开失败<br/>ERROR ' . mysqli_errno ( $link ) . ':' . mysqli_error ( $link ) );
return $link;
} /*
array(
'username'=>'king',
'password'=>'king',
'age'=>'12',
'regTime'=>'123123123'
);
INSERT user(username,password,age,regTime) VALUES('king','king','12','123123123');
*/
/**
* 插入操作
* @param object $link
* @param array $data
* @param string $table
* @return boolean
*/
function insert($link,$data,$table){
$keys = join ( ',', array_keys ( $data ) );
$vals = "'" . join ( "','", array_values ( $data ) ) . "'";
$query = "INSERT {$table}({$keys}) VALUES({$vals})";
$res = mysqli_query ( $link, $query );
if ($res) {
return mysqli_insert_id ( $link );
} else {
return false;
}
} /*
array(
'username'=>'king123',
'password'=>'king123',
'age'=>'32',
'regTime'=>'123123123'
);
UPDATE user SET username='king123',password='king123',age='32',regTime='123123123' WHERE id=1
*/
/**
* 更新操作
* @param object $link
* @param array $data
* @param string $table
* @param string $where
* @return boolean
*/
function update($link, $data, $table, $where = null) {
foreach ( $data as $key => $val ) {
$set .= "{$key}='{$val}',";
}
$set = trim ( $set, ',' );
$where = $where == null ? '' : ' WHERE ' . $where;
$query = "UPDATE {$table} SET {$set} {$where}";
$res = mysqli_query ( $link, $query );
if ($res) {
return mysqli_affected_rows ( $link );
} else {
return false;
}
} //DELETE FROM user WHERE id=
/**
* 删除操作
* @param object $link
* @param string $table
* @param string $where
* @return boolean
*/
function delete($link, $table, $where = null) {
$where = $where ? ' WHERE ' . $where : '';
$query = "DELETE FROM {$table} {$where}";
$res = mysqli_query ( $link, $query );
if ($res) {
return mysqli_affected_rows ( $link );
} else {
return false;
}
} /**
* 查询指定记录
* @param object $link
* @param string $query
* @param string $result_type
* @return array|boolean
*/
function fetchOne($link, $query, $result_type = MYSQLI_ASSOC) {
$result = mysqli_query ( $link, $query );
if ($result && mysqli_num_rows ( $result ) > 0) {
$row = mysqli_fetch_array ( $result, $result_type );
return $row;
} else {
return false;
}
} /**
* 查询所有记录
* @param object $link
* @param string $query
* @param string $result_type
* @return array|boolean
*/
function fetchAll($link, $query, $result_type = MYSQLI_ASSOC) {
$result = mysqli_query ( $link, $query );
if ($result && mysqli_num_rows ( $result ) > 0) {
while ( $row = mysqli_fetch_array ( $result, $result_type ) ) {
$rows [] = $row;
}
return $rows;
} else {
return false;
}
} /**
* 得到表中的记录数
* @param object $link
* @param string $table
* @return number|boolean
*/
function getTotalRows($link, $table) {
$query = "SELECT COUNT(*) AS totalRows FROM {$table}";
$result = mysqli_query ( $link, $query );
if ($result && mysqli_num_rows ( $result ) == 1) {
$row = mysqli_fetch_assoc ( $result );
return $row ['totalRows'];
} else {
return false;
}
} /**
* 得到结果集的记录条数
* @param object $link
* @param string $query
* @return boolean
*/
function getResultRows($link, $query) {
$result = mysqli_query ( $link, $query );
if ($result) {
return mysqli_num_rows ( $result );
} else {
return false;
}
} /**
* @param object $link
*/
function getServerInfo($link) {
return mysqli_get_server_info ( $link );
}
/**
* @param object $link
*/
function getClientInfo($link) {
return mysqli_get_client_info ( $link );
} /**
* @param object $link
*/
function getHostInfo($link){
return mysqli_get_host_info($link);
} /**
* @param object $link
*/
function getProtoInfo($link) {
return mysqli_get_proto_info ( $link );
}

跳转工具

common.func.php 激活成功之后的跳转

 <?php
/**
* 弹出提示信息并且跳转
* @param string $mes
* @param string $url
*/
function alertMes($mes,$url){
echo "<script>
alert('{$mes}');
location.href='{$url}';
</script>";
die;
}

四、完整代码

完整代码我会放在GitHub上面

链接如下:

php实现邮箱激活功能的更多相关文章

  1. .NET下用C#实现邮箱激活功能

    最近要用到安全邮箱激活的功能,故写篇博客记录下. 思路:在表中增加一个字段State来记录邮箱是否激活(0激活,1未激活.) 1.发送邮件.     1-1,给邮箱发送邮件.内容:激活地址+GUID. ...

  2. asp.net mvc 注册中的邮箱激活功能实现(一)

    基本流程图 注册页面就不再写出,现在将发送邮件的代码粘贴出来 public ActionResult SendEmial() { ; string validataCode = System.Guid ...

  3. asp.net mvc 注册中的邮箱激活功能实现

    基本流程图 注册页面就不再写出,现在将发送邮件的代码粘贴出来   public ActionResult SendEmial() { ; string validataCode = System.Gu ...

  4. asp.net mvc 注册中的邮箱激活功能实现(二)

    邮件发送功能封装 /// <summary>        /// 发送注册邮件        /// </summary>        /// <param name ...

  5. Java实现邮箱激活验证

    最近从项目分离出来的注册邮箱激活功能,整理一下,方便下次使用 RegisterValidateService.java [java] view plaincopyprint?   package co ...

  6. Java案例-用户注册邮箱绑定激活功能实现

    <–start–> 需求描述:当客户打开收到邮箱激活码的邮件,点击激活链接,正确填写激活码后就会完成邮箱激活的步骤. 在后台编程代码编写中,有以下几个要点: ① 接收客户的手机号码和邮箱激 ...

  7. javamail实现邮箱验证功能

    javamail是基于SMTP协议和POP3协议的邮件发送与接收系统,在用户注册与登陆的过程中,常需要用到邮箱验证功能,下面是基于javamail的一个简单实现 用户注册后通过servlet得到邮箱地 ...

  8. SpringBoot实现网站注册,邮件激活码激活功能

    项目源码:https://gitee.com/smfx1314/springbootemail 上一篇文章已经讲到如何springboot如何实现邮件的发送,趁热打铁,这篇文章实现如下功能. 很多网站 ...

  9. 使用Asp.Net Identity 2.0 认证邮箱激活账号(附DEMO)

    注:本文系作者原创,但可随意转载.若有任何疑问或错误,欢迎与原作者交流,原文地址:http://www.cnblogs.com/lyosaki88/p/aspnet-itentity-ii-email ...

随机推荐

  1. shell 杂集

    1.shell 相等比较注意 -eq 数字相等的比较 == 字符串相等的比较 2.== 和 = 的区别 == 可用于判断变量是否相等,= 除了可用于判断变量是否相等外,还可以表示赋值. = 与 ==  ...

  2. angular中ng-bind指令小案例

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  3. RAP开发入门-运行过程简析(三)

    今天通过标准的RAP程序来简单分析下RAP的启动过程 1.新建一个标准的rap plugin-in 项目: 得到的项目结构大概如下: run confi..->..add bundle(配置好b ...

  4. Redhat/CentOS xfs文件系统及磁盘挂载

    #!/bin/sh #DEVICE_LIST=""DEVICE_LIST="/dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /d ...

  5. Java学习笔记2——数据类型和转换

    前提知识: 1字节=8bit:1bit以一个二极管表示,代表2个状态(0或者1):2bit代表22即4种状态(00,01,10,11),8bit即是28即256种状态,16bit即是65536种状态. ...

  6. Find Bugs

    为什么没有早点知道有这么好用的插件呢?

  7. js商城倒计时

    js将秒转换为几天几小时几分钟 1 var oldsecond=second = 60,minute=0,hour=0,day=0; minute = parseInt(second/60); //算 ...

  8. vc++如何创建程序-析构函数01

    #include<iostream.h>class Point{public: int x; int y; Point() { x=0; y=0; }//构造函数是用来创建函数本身,那么, ...

  9. php libevent扩展

    Libevent 是一个用C语言编写的.轻量级的开源高性能网络库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大: 源代码相当精炼. ...

  10. Python爬虫2------爬虫屏蔽手段之代理服务器实战

      1.代理服务器: 一个处于客户端与互联网中间的服务器,如果使用代理服务器,当我们浏览信息的时候,先向代理服务器发出请求,然后由代理服务器向互联网获取信息,再返回给我们. 2.代码: import ...