网站发送邮箱验证实现找回密码

 

从上图可以看出,浏览器通过访问web站点中的邮件发送程序来提交邮件发送请求。 

邮件发送程序将把邮件发送给自己网站的SMTP服务器,该SMTP服务器收到邮件后,将根据收件人的地址在将邮件的目的地,要么是投递到本地域管理的收件人邮箱中,要么是转交给管理收件人地址域的其他SMTP服务器

当你的密码忘记时,网站给你注册时填写的邮箱发送验证码,你填写正确进入重置密码页面;网站是如何发送邮件的呢?

1,下载两个php的邮件类(就是别人写好的发送邮件的函数),把这两个包下载到你的网站中,进行调用函数;这两个类分别是:class.phpmailer.php和class.stmp.php;建议不要在官网上下载,因为官网上的phpmailer包我下载后使用报错:/e这个规则已经被新版本的php抛弃,需要用其他函数来代替它,如果不是专业学习php,要调老半天代码;

2,有了这两个函数我们还需要自己写一个调用他们俩的函数,你的很多信息也是在这里进行配置的:比如发送方的邮件,接收方的邮件,发送邮件的内容等;而步骤一中的两个类是不需要在里面配置参数的,他们是类,仅仅是用来被调用的;下面上代码(建议各位下载一套代码,不要三个主要代码东下西下,有些函数名会不匹配,出现未定义函数名);

<?php

$link=mysqli_connect("166.62.28.132","ZWJroot","654321","web003");
$username =$_POST['username']; 
$email=$_POST['email'];

$sql ="select * from t_user where username='$username'";
$res  = mysqli_query($link, $sql); 
$row=mysqli_fetch_assoc($res);
   

if(mysqli_num_rows($res)>0&&$row['email']==$email){  //若填入的邮箱和数据库中邮箱相同

    //引入邮件发送类
    require 'class.phpmailer.php';
    require 'class.smtp.php';
    

    $mail = new PHPMailer;    
    //$mail->SMTPDebug = 3; // Enable verbose debug output
    $mail->isSMTP(); // 使用SMTP服务
    $mail->Host = 'sg2pl043.prd.sn2.secureseer.net'; // 发送方的SMTP服务器地址
    $mail->SMTPAuth = true; //是否使用身份验证 
    $mail->Username = 'email@givemoc.com'; // 发送方的邮箱账户
    $mail->Password = 'mypassword'; // 如果是qq就是客户端授权密码,如果是服务器就是mail邮箱的登录密码
    $mail->SMTPSecure = 'ssl'; // 使用ssl协议方式
    $mail->Port = 465; // 端口号 
    $mail->setFrom('email@givemoc.com', "小可爱");//设置发件人信息,或者下一个;
    //$mail->AddCC('2424275819@qq.com', "小可爱");//设置发件人信息,有时候下载的phpmailer不一样,里面函数名不同

    $mail->addAddress($email, '.'); // 设置收件人信息
    $mail->addReplyTo($email, 'php');//设置回复人信息,即收件人收到邮件后,如果要回复,回复邮件将发送到的邮箱地址
    
    
    $code=rand(100000,999999);//生成随机验证码
    $mail->isHTML(true); // 邮件内容是html吗
    $mail->Subject = '找回密码';   //邮件标题
    $mail->Body = "这里是www.givemmoc.com网站;<b>您的验证码是:</b>".$code; //邮件内容;
    
   
    if(!$mail->Send()) {  //邮件发送结果
    //输出错误信息
    echo 'Mailer Error: ' . $mail->ErrorInfo;   //发送失败的原因;
    return false;
    } else {       //如若发送成功,将产生的随机验证码保存到数据库,到时候做对比;
    $sql2="update t_user  set  token='$code'  where username='$username'";
      mysqli_query($link,$sql2);
    echo '<script>alert("Message has been sent");window.history.back();</script>'; //成功输出
    }

else {

      echo   '<script>alert("账号和邮箱不匹配");window.history.back();</script>'; 
  }

?>

3,以上红色字体是必须配置的信息,如果用qq发送邮件:登录qq邮箱,点击设置,账户,往下拖找到pop3开启,生成授权码;

 

只要将授权码输入就行,还有你的邮箱改一下,qq邮件服务器地址是:

如果用服务器发送邮件:这里用的是狗爹的配置信息:

4,下面是两个类的源码地址:

class.phpmailer.php:https://github.com/featherzwj/class.phpmailer.php/blob/master/class.phpmailer.php

class.smtp.php:https://github.com/featherzwj/class.smtp.php/blob/master/class.smtp.php

5,下面是简陋的发送邮箱的html界面:

账户名:<input   name="username"  type="text"> 

邮箱地址:<input    name="email"  type="text">

6,结束。

---------------------------------------------分割线--------------------------------------------------------------------------------------------------------------

 

 

下面是我摸索的时候一些问题:

2,Fatal error: Cannot declare class PHPMailer because the name is already in use命名空间冲突,两个php的命名空间相同;

3,Warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead;

/e表示,可以使得 正则替换的时候  替换规则能够适应php 代码;

提醒的意思是用preg_replace_callback 替换 /e;

4,The following From address failed: root@localhost Mailer Error: The following From address failed: root@localhost

SMTP server error: mail from address must be same as authorization user

邮箱账号和你的授权码不一致,需要到qq邮箱在次生成新的授权码填入:

 

 

有两种发送函数,一个是setFrom,一个是Addcc(),你写的发送邮箱函数要和不同版本的class.phpmailer.php相互匹配,不要从一个地方拷贝发送邮箱代码,又从另一个地方拷贝phpmailer类,很容易报错:调用的函数未定义;

 

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值