当前位置: 首页 > article >正文

PHP如何实现邮箱验证

在PHP中,提供了 mail() 函数用于发送邮件。使用该函数需要设置邮件头信息、收件人地址、邮件主题和邮件内容等参数。下面是一个简单的使用示例:

$to = '收件邮箱';
$subject = '邮件主题';
$message = '邮件内容';
$from = '发件邮箱';
$headers = "From: $from" . "
" . "Reply-To: $from" . "
" . "X-Mailer: PHP/" . phpversion();
mail($to, $subject, $message, $headers);

我们要做的事情是在邮件内容中附上验证码和验证链接,验证码随机生成一个6位数即可:

​​​​​​​

function getContent($code,$mail){
    $content = "欢迎注册,请点击以下完成验证:<p><a href='http://www.***.com/email/validate.php?code={$code}&mail={$mail}'>请点击</a></p>";
    return $content;
}

这里需要注意可能会出现邮件被视为垃圾邮件的情况。为了避免这个问题,我们需要注意以下几点:

1、邮件内容要真实、准确,不要让邮件内容与用户想要的内容不符;

2、邮件标题要准确、简洁,并让用户容易理解邮件的内容;

3、控制邮件发送频率,不要让用户感到被骚扰;

4、遵守邮件发送规则,如设置正确的发件人、回复地址等。

接下来,为了验证,我们需要把验证码存入数据库:​​​​​​​

$servername = "localhost";
$username = "root";
$password = "123456";
$dbname = "test";

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}
$sql = "INSERT INTO email_code (`email`,`code`) values ('$to','$code')";
if ($conn->multi_query($sql) === true) {
    //插入成功
}

数据库结构是这样的:

名称说明
id数据id,自增
email邮箱
code验证码
createDate创建时间,默认当前时间

发送完成之后就需要验证了,我们需要验证对错和是否超时,新建validate.php文件:​​​​​​​

$email = $_REQUEST["email"];
$code = $_REQUEST["code"];

$servername = "localhost";
$username = "root";
$password = "123456";
$dbname = "test";

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}
$sql = "SELECT * FROM email_code WHERE email='$email'";
$result = $conn->query($sql);
while ($row = $result->fetch_assoc()) {
    if($row["code"] == $code){
        $createDate = $row["createDate"];

        date_default_timezone_set('Asia/Shanghai');


        $currentDate = date('Y-m-d H:i:s');

        $res = strtotime($currentDate) - strtotime($createDate);

        if($res < 5*60){
            //验证成功,登录逻辑

            //使用完的验证码进行删除
            $sql2 = "DELETE FROM email_code WHERE email='$email'";
            if ($conn->multi_query($sql2) === true) {
            // 删除成功
            }
        }else{
            //超时
        }
    }
}


http://www.kler.cn/a/150272.html

相关文章:

  • Android待机问题与内存泄露日志定位及bugreport获取分析
  • Leetcode 热题100 之 二叉树3
  • rhce作业4
  • QT中QCustomPlot 实现将串口接收到的数据绘制成折线图,并且图形随着接收数据更新而更新
  • GA/T1400视图库平台EasyCVR视频分析设备平台微信H5小程序:智能视频监控的新篇章
  • (51)MATLAB迫零均衡器系统建模与性能仿真
  • Android控件全解手册 - 多语言切换完美解决方案(兼容7.0以上版本)
  • 找不到 sun.misc.BASE64Decoder ,sun.misc.BASE64Encoder 类
  • ESP32-Web-Server 实战编程- 使用 AJAX 自动更新网页内容
  • pytest分布式执行(pytest-xdist)
  • rabbitmq-server-3.11.10.exe
  • 基于opencv+ImageAI+tensorflow的智能动漫人物识别系统——深度学习算法应用(含python、JS、模型源码)+数据集(三)
  • Linux CentOS7 fdisk
  • 面试题:Spring 中获取 Bean 的方式有哪些?
  • 如何生成唯一ID:探讨常用方法与技术应用
  • 运维知识点-openResty
  • 代码随想录-刷题第七天
  • element table滚动到底部加载数据(vue3)
  • C语言进阶指南(11)(指针数组与二维数组)
  • 拉普拉斯变换
  • 字母大小写转换
  • PHP微信UI在线聊天系统源码 客服私有即时通讯系统 附安装教程
  • kafka C++实现生产者
  • MYSQL基础语法二
  • 48、Flink DataStream API 编程指南(1)- DataStream 入门示例
  • 基于SpringBoot实现的教务查询系统