# 引入 # **[PHPMailer](https://github.com/PHPMailer/PHPMailer)** 邮件
github地址:https://github.com/PHPMailer/PHPMailer
第一步下载:https://github.com//PHPMailer/PHPMailer/archive/master.zip、
第二步把下载文件放到 extend 文件夹下面,建立一个文件夹叫做PHPMailer,全部放在里面
第三步 在自己方法里面引入两个文件
~~~
require_once("../extend/static/PHPMailer/src/PHPMailer.php");
require_once("../extend/static/PHPMailer/src/SMTP.php");
~~~
# Html 代码页面
~~~
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="Pragma" content="no-cache">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"/>
<meta name="format-detection" content="telephone=yes"/>
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
<title>手机注册信息</title>
<!-- Bootstrap core CSS-->
<!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
<link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.js"></script>
<script src="https://cdn.bootcss.com/sweetalert/2.1.2/sweetalert.min.js"></script>
<style type="text/css">
body{
margin: 0;
padding: 0;
}
.modal_content{
padding: 30px;
display: flex;
justify-content: center;
flex-direction: column;
}
.modal_content>div{
margin-bottom: 20px;
}
.modal_content>h5:first-child{
margin:30px 0px;
}
#dialog label{
color: #666;
}
#phone1{
display: block;
width: 100%;
height: 70px;
background: none;
padding-top: 30px;
border: 0;
outline:none;
text-align: center;
margin-top: -30px;
font-size: 16px;
border-bottom: 1px solid rgba(0,0,0,.2);
border-radius: 0;
}
.code1{
display: flex;
flex-direction: row;
justify-content: space-between;
width: 100%;
height: 70px;
background: none;
padding-top: 30px;
margin-top: -30px;
font-size: 16px;
border-bottom: 1px solid rgba(0,0,0,.2);
border-radius: 0;
}
#code1{
width: calc(100% - 90px);
height: 55px;
background: none;
padding-top: 20px;
border: 0;
outline:none;
text-align: center;
margin-top: -20px;
font-size: 16px;
}
#btnSendCode1{
width: 90px;
height: 30px;
padding: 0 5px;
margin: 0;
font-size: 14px;
text-align: center;
background: transparent;
border-radius: 30px;
color: #a07941;
border-color: #a07941;
}
::-webkit-input-placeholder { /* WebKit browsers */
font-size: 14px;
color: rgba(0,0,0,.4);
}
:-moz-placeholder { /* Mozilla Firefox 4 to 18 */
font-size: 14px;
color: rgba(0,0,0,.4);
}
::-moz-placeholder { /* Mozilla Firefox 19+ */
font-size: 14px;
color: rgba(0,0,0,.4);
}
:-ms-input-placeholder { /* Internet Explorer 10+ */
font-size: 14px;
color: rgba(0,0,0,.4);
}
.next{
text-align: center;
margin: 20px 0;
}
.next button{
width: 100%;
height: 45px;
padding: 0;
margin: 0;
background: #007BFF;
color: #fff;
border: 0;
outline:none;
border-radius: 3px;
}
</style>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-3"></div>
<div class="modal_content col-md-6">
<form action="post" id="register">
<div>
<label for="phone1">手机号:</label><br />
<input id="phone1" type="text" autocomplete="off" name="phone" value="461476246@qq.com" placeholder="请输入已绑定的手机号"/>
</div>
<div>
<label for="phone1">密码:</label><br />
<input type="password" autocomplete="off" name="password" style=" display: block;
width: 100%;
height: 70px;
background: none;
padding-top: 30px;
border: 0;
outline: none;
text-align: center;
margin-top: -30px;
font-size: 16px;
border-bottom: 1px solid rgba(0,0,0,.2);
border-radius: 0;"/>
</div>
<div>
<label for="code1">验证码:</label>
<div class="code1">
<input id="code1" type="text" name="codes" autocomplete="off" placeholder="短信验证码"/>
<button id="btnSendCode1" type="button" class="btn btn-default" value="" >获取验证码</button>
</div>
</div>
<div class="next">
<button onClick="binding()" type="button">确定</button>
</div>
</form>
</div>
<div class="col-md-3"></div>
</div>
</div>
<script language="javascript">
// var phoneReg = /(^1[3|4|5|7|8]\d{9}$)|(^09\d{8}$)/;//手机号正则
let phoneReg = /(^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$)/; //邮箱验证
$(function () {
//点击发送验证码
$('body').on('click', '#btnSendCode1', function () {
let phone = $.trim($('#phone1').val());
if (!phoneReg.test(phone)) {
alert(" 请输入有效的手机号码");
return false;
}
$('body').off('click', '#btnSendCode1');
//向后台发送处理数据
$.ajax({
type: 'post',
//提交后台php文件
url: "{:url('index/index/email')}",
// 得到表单提交的数据
data:{'phone':phone}
,
dataType: 'json',
//回调处理
success: function(data){
if (data.status ==1) {
swal({
//弹出后台返回的消息
text: data.message,
icon: "success",
button: false
});
}else{
swal({
text: data.message,
icon: "warning",
button: false
});
}
}
})
LockButton('#btnSendCode1', 60);
})
//读取cookie
if ($.cookie("djsendtime") != undefined && !isNaN($.cookie("djsendtime"))) { //读取到了cookie值
let djsendtime = $.cookie("djsendtime");
let now = new Date().getTime(); //当前时间戳
let locksecends = parseInt((djsendtime - now) / 1000);
if (locksecends <= 0) {
$.cookie("djsendtime", null);
} else {
LockButton('#btnSendCode1', locksecends);
}
}
})
// 按钮倒计时
var LockButton = function (btnObjId, locksecends) {
//1.获取当前系统时间
//2.获取 locksecends 后的系统时间
//3.用cookie保存到期时间
//4.每次加载后获取cookie中保存的时间
//5.用到期时间减去当前时间获取倒计时
let djsendtime = $.cookie("djsendtime");
if (djsendtime == null || djsendtime == undefined || djsendtime == 'undefined' || djsendtime == 'null') {
var now = new Date().getTime(); //当前时间戳
var endtime = locksecends * 1000 + now; //结束时间戳
$.cookie("djsendtime", endtime); //将结束时间保存到cookie
}
$(btnObjId).addClass('disabled').attr('disabled', 'disabled').text( + locksecends + '秒后获取');
$('body').off('click', '#btnSendCode1SMS');
let timer = setInterval(function () {
locksecends--;
$(btnObjId).text(locksecends + '秒后获取');
if (locksecends <= 0) {
//倒计时结束清除cookie值
$.cookie("djsendtime", null);
$(btnObjId).removeClass('disabled').removeAttr('disabled').text('重新获取');
clearInterval(timer);
}
}, 1000);
};
/*提交*/
function binding(){
//向后台发送处理数据
$.ajax({
type: 'post',
//提交后台php文件
url: "{:url('index/index/res')}",
// 得到表单提交的数据
data:$('#register').serialize()
,
dataType: 'json',
//回调处理
success: function(data){
if (data.status ==1) {
swal({
//弹出后台返回的消息
text: data.message,
icon: "success",
button: false
});
}else{
swal({
text: data.message,
icon: "warning",
button: false
});
}
}
})
}
</script>
</body>
</html>
~~~
![](https://box.kancloud.cn/38be8c92652e2c2480663e5d1da5a451_1386x630.png)
# php 处理代码
~~~
//发送邮件
public function email(){
$email = \think\facade\Request::post('phone');
require_once("../public/static/PHPMailer/src/PHPMailer.php");
require_once("../public/static/PHPMailer/src/SMTP.php");
// 实例化PHPMailer核心类
$mail = new \PHPMailer\PHPMailer();
// 是否启用smtp的debug进行调试 开发环境建议开启 生产环境注释掉即可 默认关闭debug调试模式
$mail->SMTPDebug = 1;
// 使用smtp鉴权方式发送邮件
$mail->isSMTP();
// smtp需要鉴权 这个必须是true
$mail->SMTPAuth = true;
// 链接qq域名邮箱的服务器地址
$mail->Host = 'smtp.qq.com';
// 设置使用ssl加密方式登录鉴权
$mail->SMTPSecure = 'ssl';
// 设置ssl连接smtp服务器的远程服务器端口号
$mail->Port = 465;
// 设置发送的邮件的编码
$mail->CharSet = 'UTF-8';
// 设置发件人昵称 显示在收件人邮件的发件人邮箱地址前的发件人姓名
$mail->FromName = 'Mrs gao';
// smtp登录的账号 QQ邮箱即可
$mail->Username = '461476246@qq.com';
// smtp登录的密码 使用生成的授权码
$mail->Password = 'rjipjeasbxaybgec';
// 设置发件人邮箱地址 同登录账号
$mail->From = '461476246@qq.com';
// 邮件正文是否为html编码 注意此处是一个方法
$mail->isHTML(true);
// 设置收件人邮箱地址
$mail->addAddress($email);
// 添加该邮件的主题
$mail->Subject = '邮件主题';
// 添加邮件正文
$mail->Body = '<h1>Hello World'.$this->codes().'
</h1>';
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
//邮件发送,必须写
$mail -> send() ;
// 发送邮件 返回状态
return ['status'=>'1','message'=>'邮件发送成功'];
}
//定义一个六位验证码
public function codes($len =6){
$str = '';
for($i=0;$i<$len;$i++){
$str .= mt_rand(0,9);
}
session('codes',$str);
session('time',time()+60);
return $str;
}
//接受数据验证处理
public function res(Request $request){
$data =$request->param();
if ($data['codes'] !=\session('codes')){
return ['status'=>'1','message'=>'两次验证码不一致'];
}
if (time() >=\session('time')){
return ['status'=>'1','message'=>'验证码已经过期'];
}
//后面就是插入数据库处理
$ifno = Db::table('users')->data([
'phone'=>$data['phone'],
'password'=>sha1($data['password'])
])->insert();
if ($ifno){
return ['status'=>'1','message'=>'注册成功'];
}
}
~~~
- Tp 框架5.1安装
- Tp 资源控制器创建跟非资源控制器
- Tp 自定义目录
- Tp 链接传参,地址栏获取参数
- Tp ajax 异步提交数据
- Tp 模型里面指定开启时间戳
- Tp加载验证码
- Tp 模版
- Tp 模版继承
- Tp模版页面If 条件 及session存储 取出
- Tp 默认在模版页面指定内容
- Tp 模版页面获取session
- Tp验证器
- Tp 自定义验证
- Thinkphp 模型验证规则使用
- Tp 文件上传
- Tp 实现注册自动登录
- Tp 编辑器
- Tp 结合 Markdown里面的editor编辑器
- Tp Marckdown 编辑模版输出
- Tp 搜索功能
- Tp 点赞 收藏
- Tp 基本权限
- Tp 创建验证器
- Sweetalert 弹出框 引用
- Tp 网站 开启 关闭功能
- Tp 网站 开启 注册功能
- Tq QQ登录
- Tp 邮箱注册 验证
- Tp 无限极分类
- Tp 路由
- Tp RBAC权限 适合于任何框架
- 创建权限模型,控制器,验证规则
- 创建角色 控制器 模型 验证规则
- 用户角色设置
- 权限验证
- Tp auth 权限
- 第一部 auth 安装
- 第二部 创建 三张数据库
- 第三部 创建用户控制器
- 第四部 创建规则表
- 规则表基本操作
- 1 规则页面加载
- 2 添加规则
- 3 编辑规则
- 4 删除规则
- 第五部 创建用户组
- 用户组基本操作
- 第一步 展示用户组首页
- 第二步 添加用户组
- 第三步 编辑用户组
- 第四部 删除用户组
- 第六步设置权限
- 第一步 创建 模型 控制器
- 第二步 首页显示
- 第三部 设置用户权限
- 第七步 执行权限认证
- 备注 附加规则原理
- Tp 数据库
- 外键约束
- Tp 结合layui 上传
- Layui 编辑器 前端展示
- Tp 模版eq
- Tp 删除
- Tp session 处理
- Tp cache缓存方法
- Tp 后台验证管理员登录
- 前台Nav 导航
- 左边导航
- Tp 批量删除
- O2O
- Tp框架插入数据自带时间戳
- Tp 结合layui 分页
- Tp 整合百度地图
- Tp 结合城市三级联动
- 密码验证
- 团购时间
- Tp模板时间修改
- 安卓App 平台入驻上线
- Api 接口返回
- Thinkphp 生成5.1二维码
- 回调Api
- layui 关闭框 刷新
- Layui 监听
- 判断是否是pc端 手机端
- Lauyi 自动转换时间
- Tp 增加时间
- ajax 同步 异步处理
- 弹出框
- 传输数据编辑
- 上传 引用 uploadify
- js 收缩
- Tp 增加数据表
- Tp-前置钩子
- 删除代码
- 适合tp5.0描述文字过长
- php 三级城市城市表带数据
- layu结合 tp table数据数组循环
- layui 解决数据为NUll 错误代码