00PHPMailer

PHPMailer是一个非常强大的 php发送邮件类,可以设定发送邮件地址、回复地址、邮件主题、html网页,上传附件,并且使用起来非常方便。

phpMailer 的特点:

1、在邮件中包含多个 TO、CC、BCC 和 REPLY-TO。
2、平台应用广泛,支持的 SMTP 服务器包括 Sendmail、qmail、Postfix、Gmail、Imail、Exchange 等等。
3、支持嵌入图像,附件,HTML 邮件。
4、可靠的强大的调试功能。
5、支持 SMTP 认证。
6、自定义邮件头。
7、支持 8bit、base64、binary 和 quoted-printable 编码。

01准备

phpmailer 安装或者下载方式:

1、从 github 上下载: https://github.com/PHPMailer/PHPMailer/

2、使用 composer 安装:

composer require phpmailer/phpmailer

我直接从github下载了.zip

邮箱配置

以qq邮箱为例,进入qq邮箱,依次找到首页–>账户–>POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,开启前两个服务,要记录对应的授权码,这个邮箱就是用来发送验证码的邮箱(发件人)。

02发送邮件

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;//根据自己的路径引入
require './PHPMailer-master/PHPMailer-master/src/Exception.php';
require './PHPMailer-master/PHPMailer-master/src/PHPMailer.php';
require './PHPMailer-master/PHPMailer-master/src/SMTP.php';$mail = new PHPMailer(true);                              // Passing `true` enables exceptions
try {//服务器配置$mail->CharSet ="UTF-8";                     //设定邮件编码$mail->SMTPDebug = 0;                        // 调试模式输出$mail->isSMTP();                             // 使用SMTP$mail->Host = 'smtp.qq.com';                // SMTP服务器$mail->SMTPAuth = true;                      // 允许 SMTP 认证$mail->Username = 'xxxxx@qq.com';                // SMTP 用户名  即邮箱的用户名$mail->Password = 'xxxxxxxxx';             // SMTP 密码  部分邮箱是授权码(例如163邮箱)$mail->SMTPSecure = 'tls';                    // 允许 TLS 或者ssl协议$mail->Port = 587;                            // 服务器端口 25 或者465 具体要看邮箱服务器支持$mail->setFrom('xxxxx@qq.com', '发件人');  //发件人$mail->addAddress('yyyyy@qq.com', '收件人');  // 收件人//$mail->addAddress('ellen@example.com');  // 可添加多个收件人$mail->addReplyTo('xxxxx@qq.com', 'info'); //回复的时候回复给哪个邮箱 建议和发件人一致//$mail->addCC('cc@example.com');                    //抄送//$mail->addBCC('bcc@example.com');                    //密送//发送附件// $mail->addAttachment('../xy.zip');         // 添加附件// $mail->addAttachment('../thumb-1.jpg', 'new.jpg');    // 发送附件并且重命名//Content$mail->isHTML(true);                                  // 是否以HTML文档格式发送  发送后客户端可直接显示对应HTML内容$mail->Subject = '这里是邮件标题' . time();$mail->Body    = '<h1>这里是邮件内容</h1>' . date('Y-m-d H:i:s');$mail->AltBody = '如果邮件客户端不支持HTML则显示此内容';$mail->send();echo '邮件发送成功';
} catch (Exception $e) {echo '邮件发送失败: ', $mail->ErrorInfo;
}

03实现简单的邮箱验证码注册

思路
1、注册的过程就是输入邮箱、密码,之后获取验证码,之后注册
2、要保证验证码在一定的时间内有效(要给验证码一个时间戳,以下代码并未实现,但是验证码的时间戳已经有了,可以直接查询最新的或者把用过的验证码删掉)
3、还要记住验证码是发给谁的,必需是对应的验证码才能注册成功
4、验证码先简单使用六位随机数
5、注册是向用户表插入数据,以下代码并未实现,只要在验证码验证成功的条件里写上插入操作就可以了

<!--register.php-->
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>注册</title>
</head><body><div><form action="../server/server_register.php" method="get">邮 箱<input type="email" name="email" id="email">密 码<input type="password" name="password" id="password"></br>验证码<input type="text" name="verificationcode" id="verificationcode"></br><button>立刻注册</button></form><button onclick="getVerificationCode()">获取验证码</button></div><script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.6.0.min.js"></script><script>function getVerificationCode() {Email = $('#email').val();//console.log(Email);$.ajax({//ajax请求路径,根据自己的写url: "http://localhost/allPHPcode/phpmailer/emailVerificationCode/server/createVerificationCode.php",type: 'get',data: { email:Email},success: function() {alert("获取验证码成功!");}})}</script>
</body></html>
<?php
//  createVerificationCode.phprequire './DB.php';
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;require '../../PHPMailer-master/PHPMailer-master/src/Exception.php';
require '../../PHPMailer-master/PHPMailer-master/src/PHPMailer.php';
require '../../PHPMailer-master/PHPMailer-master/src/SMTP.php';$email = $_GET['email'];
// echo $email;
$time = time() + 8 * 3600;//时间戳,为后续验证码一分钟内有效而添加
$verficationCode = rand(100000, 999999);//六位验证码是100000-999999之间的随机数$sql = "insert into emailverificationCode(id, username, verificationCode, createtime) values ('null', '$email', '$verficationCode' ,'$time')";
//echo $sql;
$count = DB::getInstance()->connect()->exec($sql);function sendmail($email,$verficationCode)
{$mail = new PHPMailer(true);                              // Passing `true` enables exceptions
try {//服务器配置$mail->CharSet ="UTF-8";                     //设定邮件编码$mail->SMTPDebug = 0;                        // 调试模式输出$mail->isSMTP();                             // 使用SMTP$mail->Host = 'smtp.qq.com';                // SMTP服务器$mail->SMTPAuth = true;                      // 允许 SMTP 认证$mail->Username = 'xxxxx@qq.com';                // SMTP 用户名  即邮箱的用户名$mail->Password = 'xxxxxxxxxxxxx';             // SMTP 密码  部分邮箱是授权码(例如163邮箱)$mail->SMTPSecure = 'tls';                    // 允许 TLS 或者ssl协议$mail->Port = 587;                            // 服务器端口 25 或者465 具体要看邮箱服务器支持$mail->setFrom('xxxxx@qq.com', 'Mailer');  //发件人$mail->addAddress($email, 'Joe');  // 收件人//$mail->addAddress('ellen@example.com');  // 可添加多个收件人$mail->addReplyTo('anngreen@qq.com', 'info'); //回复的时候回复给哪个邮箱 建议和发件人一致//$mail->addCC('cc@example.com');                    //抄送//$mail->addBCC('bcc@example.com');                    //密送//发送附件// $mail->addAttachment('../xy.zip');         // 添加附件// $mail->addAttachment('../thumb-1.jpg', 'new.jpg');    // 发送附件并且重命名//Content$mail->isHTML(true);                                  // 是否以HTML文档格式发送  发送后客户端可直接显示对应HTML内容$mail->Subject = '这里是邮件标题' . time();$mail->Body    = '<h1>验证码是</h1>' . $verficationCode."<br>" .date('Y-m-d H:i:s');$mail->AltBody = '如果邮件客户端不支持HTML则显示此内容';$mail->send();echo '邮件发送成功';
} catch (Exception $e) {echo '邮件发送失败: ', $mail->ErrorInfo;
}
}if ($count > 0) {sendmail($email,$verficationCode);echo "<script>alert('获取成功!');</script>";//echo "<script>alert('添加成功!');</script>";
} else {echo "<script>alert('获取失败!');</script>";
}
<?php
//server_register.phprequire 'DB.php';
$email = $_REQUEST['email'];
$password = $_REQUEST['password'];
$verificationcode = $_REQUEST['verificationcode'];$sqlselectverificationcode = "select * from emailverificationCode where username = '$email' and $verificationcode = '$verificationcode'";
$stmt = DB::getInstance()->connect()->query($sqlselectverificationcode);
if(is_null($stmt))
{echo "<script>alert('注册成功!');</script>";
}else{echo "<script>alert('注册失败!');</script>";
}
<?php
//DB.php
/** @Description: 数据库连接类*/class DB
{// 定义私有的单例对象static private $_instance;// 定义私有的连接对象private $_pdo;// 定义私有的配置信息对象private $config = ['dsn' => 'mysql:host=localhost;dbname=test;port=3306;charset=utf8','username' => 'root','password' => '','option' => [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // 默认是 :PDO::ERRMODE_SILENT,PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,]];// 私有化构造函数private function __construct() {}/*** @description: 获取单例对象 $_instance* @param {*}* @return {*}* @Author: Humbert Cheung*/static public function getInstance() {// 判断 $_instance 是否是DB类的实例,即判断 $_instance 是否不为空if(!self::$_instance instanceof self) {// 为空,则实例化self::$_instance = new self();}return self::$_instance;}public function connect() {// 判断 $_pdo 是否存在if(!$this->_pdo) {try {// 不存在则实例化$this->_pdo = new PDO($this->config['dsn'], $this->config['username'], $this->config['password'], $this->config['option']);} catch (PDOException $e) {die('数据库连接失败:' . $e->getMessage());}}return $this->_pdo;}
}

test数据库下emailverficationcode只有id(自增主键)、username、verificationCode、createtime

参考1
参考2

PHPMailer实现简单邮箱验证码相关推荐

  1. ThinkPHP5.0+PHPMailer 实现qq邮箱验证码

    一.QQ邮箱开启SMTP 1.登录qq邮箱后,点击"设置=>账户" 2.开启SMTP,生成授权码,并将授权码复制下来,代码中需要使用到 二.GitHub下载PHPMailer ...

  2. PHP下利用PHPMailer配合QQ邮箱下的域名邮箱发送邮件

    作为PHP入门开发者,常常有这种述求:自己的网站中需要添加一个使用自己的域名作为发件人邮件地址的自动发送邮件的方法,用于诸如给用户发送验证码.通知信息等.比如:我的某个用户注册模块,需要使用regis ...

  3. 板邓:PHP下利用PHPMailer配合QQ邮箱下的域名邮箱发送邮件(转)

    作为PHP入门开发者,常常有这种述求:自己的网站中需要添加一个使用自己的域名作为发件人邮件地址的自动发送邮件的方法,用于诸如给用户发送验证码.通知信息等.比如:我的某个用户注册模块,需要使用regis ...

  4. java邮箱验证码_Java实现邮箱验证码

    原标题:Java实现邮箱验证码 声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权:凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记. 邮箱验证码 一般能使用邮箱注 ...

  5. mysql查询使用qq邮箱注册_Spring Boot实现qq邮箱验证码注册和登录验证功能

    1.登录注册思路 这是一个使用spring boot做的一个qq邮箱注册和登录的项目. 没写前端页面,使用postman测试.有截图详细. 1.1.思路 注册:通过输入的邮箱发送验证码,检验前端传来的 ...

  6. php 怎么验证邮箱验证码,PHP实现邮箱验证码验证功能

    标签:邮箱验证   登录   格式   tar   程序   body   用户名   实现   include *文章来源:https://blog.egsec.cn/archives/623  ( ...

  7. phpmail通过qq发邮箱失败_PHP中利用PHPMailer配合QQ邮箱实现发邮件

    phpmailer实现给网站用户发送邮件,WordPress好像禁用了mail()函数,也不能直接使用自带的发送邮件,以防止暴露IP PHPMailer的介绍: 可运行在任何平台之上 支持SMTP验证 ...

  8. Java实现QQ邮箱登录,实现邮箱验证码三分钟失效,代码实现发送验证码和登录全过程思路。内附完整项目。

    温馨提示: 如果感觉本文章困难,请移步简单的邮箱验证,不涉及数据库和Redis,点击我进行跳转 使用技术: 1. MySQL数据库 2. Redis缓存(极其简单)点击此处学习 功能介绍: 发送验证码 ...

  9. PHP中利用PHPMailer配合QQ邮箱实现发邮件

    前言: 由于作业的需要,要实现给我们的网站用户发送邮件,于是就有了这篇博客.以下的内容是我结合网上的例子加上自己的实践的出来的.希望对大家有帮助. PHPMailer的介绍: 优点: 可运行在任何平台 ...

最新文章

  1. 定时调度模块:sched
  2. HTTP1.1与HTTP1.0的区别
  3. C# 6.0 (C# vNext) 的新功能:Exception-Handling Improvements
  4. python3 threading.lock_Python3 threading
  5. 用CSS3实现图像风格
  6. Android 屏幕防偷窥,Android 8.1将发布:启用TLS加密防偷窥
  7. Ajax无刷新评论的PHP代码,PHP Ajax实现页面无刷新发表评论
  8. map集合和javabean对象之间相互转换方法
  9. 蓝桥杯官网练习系统基础练习(一)
  10. springboot+nodejs+vue+Elementui网上商城购物系统
  11. 分布式与微服务☞web组件kafka
  12. 基于MS强度或计数的数据依赖法非标记定量蛋白质组学的蛋白质互作分析(二)
  13. 用outlook登录163邮箱的超详细教程
  14. Python中可迭代对象是什么?
  15. ps将图片加入背景【实测成功】
  16. 京东要开实体店?且看他在线下如何被苏宁碾压
  17. 在Arcgis中进行拓扑检查(二)
  18. Linux wine 字体发虚,解决QQ(wine)因字体卡死宋体发虚太难看的一种方法
  19. 大厂经典面试系列之二:京东Java面试【建议关注收藏订阅,你早晚会用上】
  20. 什么是泛域名解析?泛域名解析对优化有何影响?

热门文章

  1. 【华为OD机试】1041 - 名字的漂亮度
  2. Oracle EBS FA重分类API调用示例
  3. Qt Mac下自定义Info.plist,并自动替换变量
  4. maven打包出错 Error injecting constructor, java.lang.NoClassDefFoundError
  5. 流氓软件 浏览器主页绑架
  6. 假设检验(z-test)
  7. JavaScrip基础知识
  8. 一区SCI新目标检测框架 | one-shot的条件目标检测
  9. 趣味娱乐多微信小程序源码下载趣味制作,藏头诗,隐藏图
  10. win7触摸板怎么关闭_win7笔记本怎么打开触摸板