php实现邮箱验证的方法:首先下载phpmailer;然后解压到项目根目录下;接着需要一台邮件服务器;最后在“config.php”中配置邮箱相关的信息并创建用于发送邮件的公用方法即可。
推荐:《php视频教程》
一、introduction
需求是用户在注册时填写email,注册后,需要到邮箱验证后才能登陆。
二、实现
验证流程,注册成功后,为用户生成一个验证码;将验证码以连接方式发到用户邮箱;用户点击连接将验证码发回网站;网站验证这个验证码是否是为这个用户生成的验证码;帐号需要在24小时内验证,否则帐号失效。
1. 准备工作
需要添加phpmailer类来发邮件。下载phpmailer,然后解压到项目根目录下。
发邮件使用smtp协议,端口是25;收邮件,使用pop3协议,端口号是110。还需要一台邮件服务器。可以自己搭建,也可以使用第三方的。使用第三方的邮件服务器需要在第三方注册一个帐号。登陆开启smtp协议。
在config.php中配置邮箱相关的信息。
'email' => array( 'host' => 'smtp.163.com', 'user' => 'youxiangzhanghao', 'password' => 'password', //此处的密码为user邮箱在开启smtp时设置的授权密码。 ),2. 创建用于发送邮件的公用方法
/ * 发送邮件的方法 */functionsendmail($to, $title, $content){ require_once('./phpmailer-5.2.14/class.smtp.php'); require_once('./phpmailer-5.2.14/class.phpmailer.php'); $mail = new phpmailer(); //设置为发送邮件 $mail->issmtp(); //是否允许发送html代码为邮件内容 $mail->ishtml(true); $mail->charset = 'utf-8'; //是否需要身份验证 $mail->smtpauth = true; //邮件服务器的帐号信息 $mailconfig = c('email'); $mail->from =$mailconfig['user'].'@163.com'; $mail->fromname =$mailconfig['user']; $mail->host = $mailconfig['host']; $mail->username = $mailconfig['user']; $mail->password =$mailconfig['password']; //发邮件的端口号 $mail->port = 25; //收件人 $mail->addaddress($to); //邮件标题 $mail->subject = $title; //邮件内容 $mail->body = $content; return($mail->send());}在控制器的首页方法中测试
//测试发送邮件var_dump(sendmail('haha@163.com','phptestemail', '<a href="http://www.phptest.com">hahahah</a>'));3. 修改会员表,添加email字段和验证码字段
email varchar(150) not null comment '邮箱',email_chkcode char(32) not null default '' comment '邮箱验证码',email_chkcode_time int unsigned not null comment '邮箱验证码生成时间',key email_chkcode(email_chkcode)4.修改注册,必须填email
修改注册表单,添加email字段;修改member模型,允许插入email字段,并增加email字段为email的验证规则。
5.注册之前生成email验证码
在_before_insert()方法中
//生成email验证码 $data['email_chkcode']= md5(uniqid()); $data['email_chkcode_time']= time();6. 注册之后将验证码发给用户邮箱
/ * 注册后的钩子函数 */ protected function _after_insert($data,$option) { $content = "欢迎注册,请点击以下完成验证:<p><a href='http://www.php2.com/eshop/index.php/home/member/email_chk/code/{$data['email_chkcode']}'>请点击</a></p>"; sendmail($data['email'],'php2网站邮箱验证', $content); }7. 在member控制器添加方法完成验证
/ * 完成邮箱验证方法 */ public function email_chk() { //接收验证码 $code = i('get.code'); //查询这个验证码是否有效 $member = d('admin/member'); $info = $member->field('id,email_chkcode_time')->where(array( 'email_chkcode' => $code, ))->find(); if($info) { if((time() -$info['email_chkcode_time']) > 86400) { //帐号过期,删除这个帐号 $member->delete($info['id']); $this->error('验证码已过期,帐号已经删除,请重新注册', u('regist')); exit; } else { //验证通过,将验证码清空 $member->where(array( 'id' => $info['id'], ))->setfielf('email_chkcode', ''); $this->success('验证通过,请登陆', u('login')); exit;
评估报告怎么填写-备案平台巧用网站搜索框设计技巧和功能域名大全查询如何使用云服务器搭建网站源码4数字域名7833.com近30万结拍 有规律品相好凯里云服务器多少钱云服务器部署织梦网站不要上手就学深度学习!超详细的人工智能专家路线图,GitHub数天获2.1k星