namespace app\index\Controller;
use think\Controller;
use think\Request;
use think\Db;
use think\Loader;
class Mail extends Base
{
public function index()
{
if(Request::instance()->isPost()) {
$email = input('post.email');
$username = input('post.username');
$title = '您好,您正在进行邮箱验证';
$hasUser = Db::name('Users')
->where(['username'=>$username,'email'=>$email])
->find();
if($hasUser) {
$uid = $hasUser['id'];
$username = $hasUser['username'];
$data['passtime'] = time();
//生成token
$token = md5($hasUser['salt'].$username.$data['passtime']);
$data['token'] = $token;
//保存记录
$session['salt'] = $hasUser['salt'];
$session['username'] = $username;
session('EmailUser',$session);
$time = date('Y-m-d H:i');
$url = config('enter_url').'/index/base/emailCheck?email='.$email."&token=".$token;
$result = SendMail($title,$username,$time,$email,$url);
if ($result==1) {
$hasEmail = Db::name('EmailCheck')->where(['email'=>$email,'username'=>$username])->find();
if($hasEmail) {
Db::name('EmailCheck')->where(['email'=>$email,'username'=>$username])->update($data);
} else {
$data['email'] = $email;
$data['username'] = $username;
Db::name('EmailCheck')->insert($data);
}
return $this->success('系统已向您的邮箱发送了一封邮件<br/>请登录到您的邮箱及时重置您的密码!');
} else {
return $this->error('发送失败');
}
} else {
return $this->error('用户不存在');
}
} else {
return $this->themeFetch('get_password');
}
}
}前台index下common.php,用于放公共函数/**
* 系统邮件发送函数
* @param string $to 接收邮件者邮箱
* @param string $subject 邮件主题
* @param string $body 邮件内容
* @param string $attachment 附件列表
* @return boolean
*/
function SendMail($title,$username,$time,$email,$url)
{
$config = config('email');
import('org.util.phpmailer.PHPMailer');
$mail = new \PHPMailer;
$mail->CharSet = 'utf-8';//设定邮件编码,默认ISO-8859-1,如果发中文此项必须设置,否则乱码,
$mail->IsSMTP();//设定使用SMTP服务
$mail->SMTPSecure = 'ssl';
$mail->SMTPDebug = 1;//关闭SMTP调试功能//1=errors and messages//2=messages only
$mail->SMTPAuth = true;//启用SMTP验证功能
$mail->Port = $config['mail_port']; // SMTP服务器的端口号
$mail->Host = $config['mail_smtp'];
$mail->AddAddress($email);//添加收件人地址,
$mail->Body = "亲爱的" . $username . ":<br/>您在" . $time . "提交了通过邮箱".$email."找回密码请求。请点击下面的链接重置密码(按钮24小时内有效)。<br/><a href='" . $url . "' target='_blank'>" . $url . "</a><br/>如果以上链接无法点击,请将它复制到你的浏览器地址栏中进入访问。<br/>如果您没有提交找回密码请求,请忽略此邮件。"; //设置邮件正文
$mail->From = $config['mail_address'];//设置发件人名字
$mail->FromName = '管理员团队';//设置发件人名字
$mail->Subject = $title;//设置邮件标题
$mail->Username = $config['mail_loginname'];//设置用户名和密码
$mail->Password = $config['mail_password'];
return($mail->Send());
} banamespace app\index\controller;
use think\Controller;
use think\Db;
use think\Loader;
use think\Request;
use common\library\Mini;
/**
* 系统基础控制器:不需登录
* @author tangtanglove <dai_hang_love@126.com>
*/
class Base extends Mini
{
/**
* 邮箱校验
* @author cms云商城
*/
public function emailCheck()
{
//获得email邮箱
$email = input('email');
$token = input('token');
$UserEmail = session('EmailUser');
$res = Db::name('EmailCheck')->where(['username'=>$UserEmail['username'],'email'=>$email])->find();
if($res) {
$yz_token = md5($UserEmail['salt'].$UserEmail['username'].$res['passtime']);
if($yz_token==$token){
if(time()-$res['passtime']>config('email_expiry')) {
return $this->error('该链接已过期');
} else {
$session['username'] = $UserEmail['username'];
$session['email'] = $email;
$session['uuid'] = Db::name('Users')->where(['email'=>$email,'username'=>$UserEmail['username']])->value('uuid');
session('editUser',$session);
return $this->success('请重设密码',url('base/editpass'));
}
} else {
return $this->error('无效的链接');
}
} else {
return $this->error('错误的链接');
}
return $this->themeFetch('editpass');
}邮箱验证到这里就结束了,这是指云商城模块的一小部分,我们的目的是方便大家进行敏捷开发,避免重复造轮子cms云商城,集成微信、阿里支付模块,阿里大于手机验证模块,邮箱验证模块等,极大的提高了开发速度,现在开源推广,如遇到什么问题,有什么好的建议,欢迎加q讨论
源码索取QQ群号 :588401996 或登录小微云商官网:http://w.yunshang.shop
最佳答案