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

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{//超时}}
}

相关文章:

  • 如何解决ajax浏览器缓存
  • 微信小程序保存二维码的过程
  • 构建第一个ArkTS应用(纯HarmonyOS应用)
  • 打印菱形图案C语言
  • C++服务器 支持http、tcp protobuf、websocket,linux开源框架 零依赖轻松编译部署 Reactor
  • SCAU:前一个和后一个字符
  • JAVA代码优化:Easy Excel(操作Excel文件的开源工具)
  • 基于ssm Vue的戒烟网站源码和论文
  • 实时流式计算 kafkaStream
  • 【算法思考记录】力扣2653. 滑动子数组的美丽值【C++,滑动窗口】
  • 【算法】希尔排序
  • HR看好的字符函数和字符串处理函数!!!
  • [MySQL]日期和时间函数
  • 计算机网络体系的形成
  • leetcode977. 有序数组的平方
  • 《剑指offer》分解让复杂问题更简单
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • Brief introduction of how to 'Call, Apply and Bind'
  • CentOS 7 防火墙操作
  • ES6 ...操作符
  • ES6简单总结(搭配简单的讲解和小案例)
  • Java深入 - 深入理解Java集合
  • leetcode-27. Remove Element
  • MySQL数据库运维之数据恢复
  • python 装饰器(一)
  • Redux 中间件分析
  • SpingCloudBus整合RabbitMQ
  • supervisor 永不挂掉的进程 安装以及使用
  • VuePress 静态网站生成
  • Vultr 教程目录
  • zookeeper系列(七)实战分布式命名服务
  • 闭包--闭包之tab栏切换(四)
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 力扣(LeetCode)965
  • 盘点那些不知名却常用的 Git 操作
  • 扑朔迷离的属性和特性【彻底弄清】
  • 思否第一天
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • UI设计初学者应该如何入门?
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (12)Hive调优——count distinct去重优化
  • (7)STL算法之交换赋值
  • (poj1.3.2)1791(构造法模拟)
  • (九)信息融合方式简介
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (转)VC++中ondraw在什么时候调用的
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • .htaccess 强制https 单独排除某个目录
  • .NET 读取 JSON格式的数据
  • .net实现客户区延伸至至非客户区