如何通过验证令牌在 PHP 中设置电子邮件验证:完整指南

如何通过验证令牌在 php 中设置电子邮件验证:完整指南

电子邮件验证是确保电子邮件地址存在并且可以接收电子邮件的过程。鉴于,电子邮件验证会检查地址格式是否正确;也就是说 – 根据特定标准(例如 utf-8)编写。 

在本文中,我将讨论 php 电子邮件验证以及如何将其用于 web 开发和通过验证令牌进行用户身份验证。文章涉及一些微教程,包括:

带有 mailtrap 的 phpmailer 配置

一个简单的 html 表单创建

立即学习“PHP免费学习笔记(深入)”;

基本电子邮件地址验证

生成令牌和凭证并将其存储在 sql 数据库中

使用验证令牌发送验证电子邮件

与验证相关的电子邮件测试

所以,让我们开始吧。 

设置电子邮件发送

要发送验证电子邮件,您可以使用 php 内置的 mail() 函数或像 phpmailer 这样的库,它提供更多功能和更好的可靠性。

由于我想让本教程尽可能安全且可用于生产,因此我将使用“phpmailer”。检查通过composer安装phpmailer的代码:

作曲家需要 phpmailer/phpmailer

为什么使用 mailtrap api/smtp?

这是一个电子邮件传送平台,可在一个地方测试、发送和控制您的电子邮件。而且,除其他外,您还可以获得以下内容:

各种语言的现成配置设置,包括 php 和 laravel

smtp 和 api 以及主要语言的 sdk,包括 ofc、php。 

行业最佳的分析。 

27/7 人力支持,以及紧急案件的快速通道程序。 

所有这些都可以让您启动电子邮件验证过程,并确保所有人的安全和稳定。

继续使用 mailtrap 配置 phpmailer 的设置:

$phpmailer = new phpmailer();$phpmailer->issmtp();$phpmailer->host = 'live.smtp.mailtrap.io';$phpmailer->smtpauth = true;$phpmailer->port = 587;$phpmailer->username = 'api';$phpmailer->password = 'your_mailtrap_password';

这是 phpmailer 设置:

use phpmailerphpmailerphpmailer;use phpmailerphpmailerexception;require 'vendor/autoload.php';function sendverificationemail($email, $verificationcode) {    $mail = new phpmailer(true);    try {        // server settings        $mail->issmtp();        $mail->host = 'live.smtp.mailtrap.io';        $mail->smtpauth = true;        $mail->username = 'api';        $mail->password = 'your_mailtrap_password';        $mail->smtpsecure = phpmailer::encryption_starttls;        $mail->port = 587;        // recipients        $mail->setfrom('youremail@example.com', 'your website');        $mail->addaddress($email);        // content        $mail->ishtml(false);        $mail->subject = 'email verification';        $mail->body    = "your verification code is: $verificationcode";        $mail->send();        return true;    } catch (exception $e) {        return false;    }}

请注意,上面的代码不会发送验证令牌(点击此处跳转到带有验证令牌的代码片段)。这只是如何设置 mailtrap smtp 和定义验证功能的示例。以下是要点的快速细分:

phpmailer 和 exception 类被导入。

sendverificationemail($email, $verificationcode) 是函数定义。 

创建了一个新的 phpmailer 对象。 

try-catch 块处理电子邮件发送期间的异常。

服务器设置按照示例配置设置为 mailtrap。 

电子邮件内容设置为 ishtml(false) 为纯文本。 

提示:

电子邮件内容可以重构为 html。 

由于吞吐量限制,您应该避免使用 gmail.com 作为注册表单 smtp 中继。但如果您确实想创建邮件程序 php 文件并通过 gmail 发送,请查看本教程。 

创建注册表

下面是一个简单的注册表单,它包含标题和用户帐户信息(用户名、电子邮件和密码)。 

它没有任何 css 样式表或 div 类,因为这只是一个示例。

但是,我建议您将这些包含在生产中,并使它们与您品牌的设计语言保持一致。否则,您的表单可能看起来不专业,用户也不愿意参与其中。

 

    register                            


额外专业提示 – 考虑在表单中使用 javascript

如果您想要有关如何创建包含 recaptcha 的 php 联系表单的完整教程,请观看下面的视频⬇️。 

js 可以实时验证用户输入,对错误提供即时反馈,无需重新加载页面。 

通过在客户端捕获错误,js 可以减少发送到服务器的无效请求的数量,从而减少服务器负载并提高每个会话的性能。

使用ajax,js可以从服务器发送和接收数据,无需重新加载页面,提供更流畅的用户体验。

现在,我将转向电子邮件地址验证。  

电子邮件地址验证

这是一个检查域和 mx 记录的简单脚本。它基本上允许您通过执行 mx 查找来验证电子邮件。

<?php// this method checks if the domain part of the email address has a functioning mail server.$email = "user@example.com";list($user, $domain) = explode(separator:"@", $email)if (filter_var($email, filter:filter_validate_email) && getmxrr($domain, &hosts: $mxhosts)){    echo "valid email address with a valid mail server" . php_eol;} else {    echo "invalid email address or no valid mail server found" . php_eol;}

但是,该脚本不会发送电子邮件以进行用户激活和身份验证。此外,它不在 mysql 中存储任何数据。 

为此,我将在接下来的部分中执行以下操作:

生成验证令牌

创建 php mysql 架构来存储注册表单中的凭据

发送带有令牌的验证电子邮件

验证验证令牌

提示:类似的逻辑可以应用于注销/登录表单。

生成验证令牌

验证令牌是在注册过程中为每个用户生成的唯一字符串。该令牌包含在验证电子邮件中,有两种方法可以生成它。

方法1

第一种方法利用 bin2hex 命令创建一个随机令牌,参数设置为 (random_bytes(50))。

 

$token = bin2hex(random_bytes(50));

方法2

或者,您可以使用下面的脚本生成令牌。我将在电子邮件发送脚本中使用该脚本。

<?phpfunction generateverificationcode($length = 6) {    $characters = '0123456789';    $code = '';    for ($i = 0; $i 

存储验证令牌

在发送验证电子邮件之前,确保正确处理和存储用户数据至关重要。我将使用简单的 sql 架构来创建用户表,并将生成的令牌与用户的注册信息一起存储在数据库中。

create table users (    id int auto_increment primary key,    username varchar(50) not null,    email varchar(100) not null,    password varchar(255) not null,    token varchar(255) default null,    is_verified tinyint(1) default 0);

快速细分:

上面的脚本创建了一个包含以下列的用户表:

id – 每个用户的唯一标识符,自动递增。

username – 用户的用户名;它不能为空。

email – 用户的电子邮件地址;它不能为空。

password – 用户的密码(散列);它不能为空。

token – 验证令牌,可以为空。

is_verified – 指示用户是否已验证的标志(0 表示未验证,1 表示已验证),默认值为 0。

发送验证令牌 

总的来说,下面的脚本是本文前面讨论的所有内容的合并,其设计目的是:

生成随机数字验证码。 

使用phpmailer发送验证邮件到指定邮箱。

配置电子邮件服务器设置。 

处理潜在的错误。 

提供邮件是否发送成功的反馈。

请注意,该脚本面向 mailtrap 用户,并且它利用 smtp 方法。

<?phprequire 'vendor/autoload.php';use phpmailerphpmailerphpmailer;use phpmailerphpmailersmtpuse phpmailerphpmailerexception;//function to generate a random verification code1 usagefunction generateverificationcode($length = 6) {    $characters = '0123456789';    $code = '';    for ($i = 0; $i smtpdebug = smtp::debug_off; // set to debug_server for debugging        $mail ->issmtp();        $mail ->host = 'live.smtp.mailtrap.io'; // mailtrap smtp server host         $mail ->smtpauth = true;        $mail ->username = 'api'; // your mailtrap smtp username        $mail ->password = 'your_mailtrap_password'; // your mailtrap smtp password        $mail ->smtpsecure = phpmailer::encryption_starttls; // enable tls encryption        $email ->port = 587; // tcp port to connect to        //recipients        $mail->setfrom(address:'mailtrapclub@gmail.com', name:"john doe"); //sender's email and name        $mail->addaddress($email); // recipient's email        //content        $mail->ishtml(ishtml:false); //set to true if sending html email        $mail->subject = 'email verification';        $mail->body = "your verification code is: $verificationcode";        $mail->send();        return true;    }catch (exception $e) {        return false;    }}//example usage$email = "mailtrapclub+test@gmail.com"$verificationcode = generateverificationcode();if (sendverificationemail($email,$verificationcode)){    echo "a verification email has been sent to $email. please check your inbox and enter the code to verrify your email." . php_eol;} else {    echo "failed to send the verification email. please try again later." . php_eol;}

验证验证令牌

是的,标题有点循环,但这正是您所需要的。下面的脚本启用了“验证的验证”流程?,其移动方式如下:

用户点击验证链接。 令牌得到验证。用户的电子邮件在数据库中被标记为已验证。

connect_error) {    die("Connection failed: " . $conn->connect_error);}if (isset($_GET['token'])) {    $token = $_GET['token'];    $stmt = $conn->prepare("SELECT * FROM users WHERE token=? LIMIT 1");    $stmt->bind_param("s", $token);    $stmt->execute();    $result = $stmt->get_result();    if ($result->num_rows > 0) {        $user = $result->fetch_assoc();        $stmt->close();        $stmt = $conn->prepare("UPDATE users SET is_verified=1, token=NULL WHERE id=?");        $stmt->bind_param("i", $user['id']);        if ($stmt->execute() === TRUE) {            echo "Email verification successful!";        } else {            echo "Error: " . $conn->error;        }        $stmt->close();    } else {        echo "Invalid token!";    }}$conn->close();?>

我们感谢您选择这篇文章来了解更多有关 php 电子邮件验证的信息。要继续阅读文章并发现有关相关主题的更多文章,请关注 mailrap 博客!

以上就是如何通过验证令牌在 PHP 中设置电子邮件验证:完整指南的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1244414.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月9日 16:49:38
下一篇 2025年12月9日 16:49:51

相关推荐

  • CSS mask属性无法获取图片:为什么我的图片不见了?

    CSS mask属性无法获取图片 在使用CSS mask属性时,可能会遇到无法获取指定照片的情况。这个问题通常表现为: 网络面板中没有请求图片:尽管CSS代码中指定了图片地址,但网络面板中却找不到图片的请求记录。 问题原因: 此问题的可能原因是浏览器的兼容性问题。某些较旧版本的浏览器可能不支持CSS…

    2025年12月24日
    900
  • 如何用dom2img解决网页打印样式不显示的问题?

    用dom2img解决网页打印样式不显示的问题 想将网页以所见即打印的的效果呈现,需要采取一些措施,特别是在使用了bootstrap等大量采用外部css样式的框架时。 问题根源 在常规打印操作中,浏览器通常会忽略css样式等非必要的页面元素,导致打印出的结果与网页显示效果不一致。这是因为打印机制只识别…

    2025年12月24日
    800
  • 如何用 CSS 模拟不影响其他元素的链接移入效果?

    如何模拟 css 中链接的移入效果 在 css 中,模拟移入到指定链接的效果尤为复杂,因为链接的移入效果不影响其他元素。要实现这种效果,最简单的方法是利用放大,例如使用 scale 或 transform 元素的 scale 属性。下面提供两种方法: scale 属性: .goods-item:ho…

    2025年12月24日
    700
  • Uniapp 中如何不拉伸不裁剪地展示图片?

    灵活展示图片:如何不拉伸不裁剪 在界面设计中,常常需要以原尺寸展示用户上传的图片。本文将介绍一种在 uniapp 框架中实现该功能的简单方法。 对于不同尺寸的图片,可以采用以下处理方式: 极端宽高比:撑满屏幕宽度或高度,再等比缩放居中。非极端宽高比:居中显示,若能撑满则撑满。 然而,如果需要不拉伸不…

    2025年12月24日
    400
  • PC端H5项目如何实现适配:流式布局、响应式设计和两套样式?

    PC端的适配方案及PC与H5兼顾的实现方案探讨 在开发H5项目时,常用的屏幕适配方案是postcss-pxtorem或postcss-px-to-viewport,通常基于iPhone 6标准作为设计稿。但对于PC端网项目,处理不同屏幕大小需要其他方案。 PC端屏幕适配方案 PC端屏幕适配一般采用流…

    2025年12月24日
    300
  • CSS 元素设置 10em 和 transition 后为何没有放大效果?

    CSS 元素设置 10em 和 transition 后为何无放大效果? 你尝试设置了一个 .box 类,其中包含字体大小为 10em 和过渡持续时间为 2 秒的文本。当你载入到页面时,它没有像 YouTube 视频中那样产生放大效果。 原因可能在于你将 CSS 直接写在页面中 在你的代码示例中,C…

    2025年12月24日
    400
  • 如何实现类似横向U型步骤条的组件?

    横向U型步骤条寻求替代品 希望找到类似横向U型步骤条的组件或 CSS 实现。 潜在解决方案 根据给出的参考图片,类似的组件有: 图片所示组件:图片提供了组件的外观,但没有提供具体的实现方式。参考链接:提供的链接指向了 SegmentFault 上的另一个问题,其中可能包含相关的讨论或解决方案建议。 …

    2025年12月24日
    800
  • 如何让小说网站控制台显示乱码,同时网页内容正常显示?

    如何在不影响用户界面的情况下实现控制台乱码? 当在小说网站上下载小说时,大家可能会遇到一个问题:网站上的文本在网页内正常显示,但是在控制台中却是乱码。如何实现此类操作,从而在不影响用户界面(UI)的情况下保持控制台乱码呢? 答案在于使用自定义字体。网站可以通过在服务器端配置自定义字体,并通过在客户端…

    2025年12月24日
    800
  • 如何优化CSS Grid布局中子元素排列和宽度问题?

    css grid布局中的优化问题 在使用css grid布局时可能会遇到以下问题: 问题1:无法控制box1中li的布局 box1设置了grid-template-columns: repeat(auto-fill, 20%),这意味着容器将自动填充尽可能多的20%宽度的列。当li数量大于5时,它们…

    2025年12月24日
    800
  • SASS 中的 Mixins

    mixin 是 css 预处理器提供的工具,虽然它们不是可以被理解的函数,但它们的主要用途是重用代码。 不止一次,我们需要创建多个类来执行相同的操作,但更改单个值,例如字体大小的多个类。 .fs-10 { font-size: 10px;}.fs-20 { font-size: 20px;}.fs-…

    2025年12月24日
    000
  • 如何在地图上轻松创建气泡信息框?

    地图上气泡信息框的巧妙生成 地图上气泡信息框是一种常用的交互功能,它简便易用,能够为用户提供额外信息。本文将探讨如何借助地图库的功能轻松创建这一功能。 利用地图库的原生功能 大多数地图库,如高德地图,都提供了现成的信息窗体和右键菜单功能。这些功能可以通过以下途径实现: 高德地图 JS API 参考文…

    2025年12月24日
    400
  • 如何使用 scroll-behavior 属性实现元素scrollLeft变化时的平滑动画?

    如何实现元素scrollleft变化时的平滑动画效果? 在许多网页应用中,滚动容器的水平滚动条(scrollleft)需要频繁使用。为了让滚动动作更加自然,你希望给scrollleft的变化添加动画效果。 解决方案:scroll-behavior 属性 要实现scrollleft变化时的平滑动画效果…

    2025年12月24日
    000
  • CSS mask 属性无法加载图片:浏览器问题还是代码错误?

    CSS mask 属性请求图片失败 在使用 CSS mask 属性时,您遇到了一个问题,即图片没有被请求获取。这可能是由于以下原因: 浏览器问题:某些浏览器可能在处理 mask 属性时存在 bug。尝试更新到浏览器的最新版本。代码示例中的其他信息:您提供的代码示例中还包含其他 HTML 和 CSS …

    2025年12月24日
    000
  • 如何为滚动元素添加平滑过渡,使滚动条滑动时更自然流畅?

    给滚动元素平滑过渡 如何在滚动条属性(scrollleft)发生改变时为元素添加平滑的过渡效果? 解决方案:scroll-behavior 属性 为滚动容器设置 scroll-behavior 属性可以实现平滑滚动。 html 代码: click the button to slide right!…

    2025年12月24日
    500
  • 如何用 CSS 实现链接移入效果?

    css 中实现链接移入效果的技巧 在 css 中模拟链接的移入效果可能并不容易,因为它们不会影响周围元素。但是,有几个方法可以实现类似的效果: 1. 缩放 最简单的方法是使用 scale 属性,它会放大元素。以下是一个示例: 立即学习“前端免费学习笔记(深入)”; .goods-item:hover…

    2025年12月24日
    000
  • 网页使用本地字体:为什么 CSS 代码中明明指定了“荆南麦圆体”,页面却仍然显示“微软雅黑”?

    网页中使用本地字体 本文将解答如何将本地安装字体应用到网页中,避免使用 src 属性直接引入字体文件。 问题: 想要在网页上使用已安装的“荆南麦圆体”字体,但 css 代码中将其置于第一位的“font-family”属性,页面仍显示“微软雅黑”字体。 立即学习“前端免费学习笔记(深入)”; 答案: …

    2025年12月24日
    000
  • 如何选择元素个数不固定的指定类名子元素?

    灵活选择元素个数不固定的指定类名子元素 在网页布局中,有时需要选择特定类名的子元素,但这些元素的数量并不固定。例如,下面这段 html 代码中,activebar 和 item 元素的数量均不固定: *n *n 如果需要选择第一个 item元素,可以使用 css 选择器 :nth-child()。该…

    2025年12月24日
    200
  • 如何用 CSS 实现类似卡券的缺口效果?

    类似卡券的布局如何实现 想要实现类似卡券的布局,可以使用遮罩(mask)来实现缺口效果。 示例代码: .card { -webkit-mask: radial-gradient(circle at 20px, #0000 20px, red 0) -20px;} 效果: 立即学习“前端免费学习笔记(…

    2025年12月24日
    000
  • 如何用纯代码实现自定义宽度和间距的虚线边框?

    自定义宽度和间距的虚线边框 提问: 如何创建一个自定义宽度和间距的虚线边框,如下图所示: 元素宽度:8px元素高度:1px间距:2px圆角:4px 解答: 传统的解决方案通常涉及使用 border-image 引入切片的图片来实现。但是,这需要引入外部资源。本解答将提供一种纯代码的方法,使用 svg…

    2025年12月24日
    000
  • PC端、PC兼响应式H5项目,如何选择最佳适配方案?

    多屏适配:PC端、PC兼响应式H5项目解决方案 针对PC端的网页适配,业界普遍采用以下方案: 流媒体查询:根据设备屏幕宽度应用不同的样式表,实现不同屏幕尺寸的适配。栅格系统:将布局划分为多个网格,根据屏幕宽度调整网格的显示和隐藏,实现自适应布局。 一般情况下,设计师设计PC页面时,会以特定像素宽度为…

    2025年12月24日
    000

发表回复

登录后才能评论
关注微信