在java项目中使用QQ邮箱发送验证码邮件

第一步:集成邮箱服务

 在一个java项目中需要一个邮件服务来发送邮件可以使用JavaMail API来实现这一点,在这之前需要在项目中导入javax.mail.jar写入依赖。

方法一:直接在Maven中写入依赖

        <dependency><groupId>org.apache.commons</groupId><artifactId>commons-email</artifactId><version>1.5</version></dependency>

方法二:使用idea在项目结构->项目设置->模块->依赖中搜索添加

第二步:配置邮箱

需要配置QQ邮箱的SMTP服务。进入QQ邮箱->设置->账号

 开启服务后在管理服务中获取授权码

import javax.mail.*;  
import javax.mail.internet.*;  
import java.util.Properties;  public class EmailSender {  public static void sendEmail(String toEmail, String verificationCode) {  // 设置邮件服务器  String host = "smtp.qq.com";  final String username = "your_qq_email@qq.com";  // 你的QQ邮箱  final String password = "your_password_or_app_specific_password";  // 你的QQ邮箱密码或应用专用密码  Properties props = new Properties();  props.put("mail.smtp.auth", "true");  props.put("mail.smtp.starttls.enable", "true");  props.put("mail.smtp.host", host);  props.put("mail.smtp.port", "587");  // 获取默认session对象  Session session = Session.getInstance(props,  new javax.mail.Authenticator() {  protected PasswordAuthentication getPasswordAuthentication() {  return new PasswordAuthentication(username, password);  }  });  try {  // 创建默认的 MimeMessage 对象  Message message = new MimeMessage(session);  // Set From: 头部头字段 of the header  message.setFrom(new InternetAddress(username));  // Set To: 头部头字段 of the header  message.setRecipients(Message.RecipientType.TO,  InternetAddress.parse(toEmail));  // Set Subject: 头部头字段  message.setSubject("注册验证码");  // 设置消息体  message.setText("您的验证码是: " + verificationCode);  // 发送消息  Transport.send(message);  System.out.println("Sent message successfully....");  } catch (MessagingException e) {  throw new RuntimeException(e);  }  }  
}

替换your_qq_email@qq.comyour_password_or_app_specific_password为你的QQ邮箱地址和相应的密码或授权码。 

第三步:生成验证码

在服务器端生成一个随机的验证码,并将其与用户的注册信息(如邮箱地址)关联起来,存储在数据库或缓存中。

 

第四步:发送验证码

使用JavaMail API,构建一封包含验证码的邮件,并通过SMTP服务发送到用户的QQ邮箱。

第五步:用户验证

用户收到邮件后,在聊天室的注册界面输入验证码。服务器验证输入的验证码是否与存储的验证码匹配。

应用场景

在Java项目中,需要使用QQ邮箱给用户发送验证码的情况通常发生在以下场景:

  1. 用户注册:在用户注册过程中,为了确保注册信息的真实性和防止恶意注册,系统通常会要求用户输入邮箱地址,并向该地址发送一个验证码。用户需要输入正确的验证码才能完成注册。

  2. 密码重置:当用户忘记密码时,系统可以提供密码重置的功能。用户输入邮箱地址后,系统会发送一个包含验证码的邮件到该地址。用户输入这个验证码后,就可以进行密码重置的操作。

  3. 邮箱验证:系统为了确认用户的邮箱地址是否真实有效,会在用户输入邮箱后发送一个验证链接或验证码到该邮箱。用户点击链接或输入验证码后,邮箱地址才会被系统确认为有效。

  4. 安全验证:在涉及到用户敏感操作(如修改重要信息、进行交易等)时,系统可能会要求用户进行额外的安全验证。发送验证码到用户的邮箱地址是一种常见的安全验证方式。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/4655.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

李沐64_注意力机制——自学笔记

注意力机制 1.卷积、全连接和池化层都只考虑不随意线索 2.注意力机制则显示的考虑随意线索 &#xff08;1&#xff09;随意线索倍称之为查询(query) &#xff08;2&#xff09;每个输入是一个值value&#xff0c;和不随意线索key的对 &#xff08;3&#xff09;通过注意力池…

【Unity动画系统】详解Root Motion动画在Unity中的应用(二)

Root Motion遇到Blend Tree 如果Root Motion动画片段的速度是1.8&#xff0c;那么阈值就要设置为1.8&#xff0c;那么在代码中的参数就可以直接反映出Root Motion的最终移动速度。 Compute Thresholds&#xff1a;根据Root Motion中某些数值自动计算这里的阈值。 Velocity X/…

Meilisearch 快速入门(Windows 环境) 搜索引擎 语义搜索

Meilisearch 快速入门(Windows 环境)# 简介# Meilisearch 是一个基于 rust 开发的,快速的、完全开源的轻量级搜索引擎。它的数据存储基于磁盘与内存映射,不受 RAM 限制。在一定数量级下,搜索速度不逊于 Elasticsearch。 下载# 官方服务端包下载地址:github.com/meili…

对于button按钮引发的bug

主要原因就是今天在给button按钮添加一个点击事件的时候&#xff0c;并没有声明button的type类型&#xff0c;就一直发生点击按钮但事件并不触发的问题。 触发这种问题的原因就是: 按钮默认的 type 类型是 "submit"&#xff0c;而不是 "button"。当你不显式…

【前端】VUE项目创建

在所需文件夹中打开cmd命令行窗口&#xff0c;输入vue ui 进入web可视化界面选择创建新项目 根据需求依次完成下列选择&#xff0c;下列是参考配置&#xff0c;完成后点击创建项目即可 最终显示完成

(学习日记)2024.05.10:UCOSIII第六十四节:常用的结构体(os.h文件)第三部分

之前的章节都是针对某个或某些知识点进行的专项讲解&#xff0c;重点在功能和代码解释。 回到最初开始学μC/OS-III系统时&#xff0c;当时就定下了一个目标&#xff0c;不仅要读懂&#xff0c;还要读透&#xff0c;改造成更适合中国宝宝体质的使用方式。在学完野火的教程后&a…

从OpenJDK源码看JAVA虚拟机的创建过程

这里写目录标题 关于Java跨平台能力的理解Java Virtual Machine是怎么创建的。1. Java Launcher2. JLI_Launch 入口3. JVM-Init4. 开启新线程并继续5. 调用JavaMain6. 初始化Java虚拟机&#xff0c;并执行Main方法java.c中的InitializeJVM 方法 7. JNI_CreateJavaVM8. 虚拟机创…

WPS的JS宏如何设置Word文档的表格的单元格文字重新编号

希望对Word文档中的表格进行统一处理&#xff0c;表格内的编号&#xff0c;有时候会出现紊乱&#xff0c;下一个表格的编号承接了上一个表格的编号&#xff0c;实际需要重新编号。 当表格比较多时&#xff0c;手动更改非常麻烦&#xff0c;而且更改一遍并不能完成&#xff0c;…

使用 XHbuilder 编辑器 uniapp开发 app 中使用手机本相机可直接拍摄照片进行上传,也可以选择相册进行上传

学习目标&#xff1a; 使用 XHbuilder 编辑器 uniapp开发 app 中使用手机本相机可直接拍摄照片进行上传&#xff0c;也可以选择相册进行上传 学习内容&#xff1a; 相关内容 上传图片上传时调用的相关方法配置的相关模块需要配置的相关权限 知识小结&#xff1a; 总结&#…

最大连续1的个数 ||| ---- 滑动窗口

题目链接 题目: 分析: 题目中说可以将最多k个0翻转成1, 如果我们真的这样算就会十分麻烦, 所以我们可以换一种思路: 找到一个最长的子数组, 最多有k个0解法一: 暴力解法: 找到所有的最多有k个0的子字符串, 返回最长的解法二: 找到最长的子数组, 我们可以想到"滑动窗口算…

【win10相关】更新后出现未连接到互联网的问题及解决

问题背景 在win10更新完系统之后&#xff0c;第二天电脑开机后&#xff0c;发现无法上网&#xff0c;尝试打开百度&#xff0c;但是出现以下图片&#xff1a; 经过检查&#xff0c;发现手机是可以上网的&#xff0c;说明网络本身并没有问题&#xff0c;对防火墙进行了一些设置…

C++/BOOST filesystem fs::directory_iterator一个滑稽的错误

错误来源于&#xff0c;用 fs::directory_iterator iter(folderPath), end; 然后for循环 for (; iter ! iter_end; iter) {} 最开始没问题&#xff0c;后来说加个进度条&#xff0c;统计一下所有文件数量&#xff0c;用了std::distance&#xff0c; int totalFiles std::…

XYCTF2024 部分w

RE 1. 聪明的信使 基础爆破 #include<stdio.h> #include<string.h> int main() {char enc[] "oujp{H0d_TwXf_Lahyc0_14_e3ah_Rvy0acwc!}";char flag[41] {0};int i, j;for (i 0; i < strlen(enc); i){for (j 33; j < 127; j){if ((j < 9…

Skill Check: Fundamentals of Large Language Models

Skill Check: Fundamentals of Large Language Models 完结&#xff01;

Vue项目中引入高德地图步骤详解,附示例代码

vue中如何使用高德地图&#xff0c;下面为您详解。 步骤一&#xff1a;安装高德地图的JavaScript API 在Vue项目的根目录下打开终端&#xff0c;执行以下命令安装高德地图的JavaScript API&#xff1a; npm install amap/amap-jsapi-loader --save 步骤二&#xff1a;创建地…

什么?你还不懂文件系统和软硬链接?

文章目录 序言认识磁盘磁盘在系统中的管理熟悉磁盘各个分区 软硬链接软链接硬链接 序言 首先熟悉一下一些专有名词(了解即可,但必须有一个概念认识) 固态:SSD,笔记本中常装的,台式机中也可以装,常见的对应接口M.2和SATA接口 磁盘:90年代常用的数据存储设备,或是现在企业级数据…

IPv4 NAT(含Cisco配置)

IPv4 NAT&#xff08;含Cisco配置&#xff09; IPv4私有空间地址 类RFC 1918 内部地址范围前缀A10.0.0.0 - 10.255.255.25510.0.0.0/8B172.16.0.0 - 172.31.255.255172.16.0.0/12C192.168.0.0 - 192.168.255.255192.168.0.0/16 这些私有地址可在企业或站点内使用&#xff0c…

从零开始的软件测试学习之旅(四)web项目工作流程介绍

WEB手工项目 项目介绍项目技术分析项目学习准备工作如何快速熟悉项目举例熟悉TPshop项目 总体系统项目介绍项目与数据库测试流程什么是软件需求需求评审 测试计划测试方案测试计划和测试方案的区别 项目介绍 满足经典三层架构:前端 后端 数据库 前端:运行在用户端的浏览器和客…

同仁堂医养拟赴港上市,养老产业的盈利难题有了答案?

提及银发经济&#xff0c;大众可能最先想到的就是养老产业&#xff0c;在市场需求推动下&#xff0c;这一细分赛道的增长已势不可挡。单从入局者的积极性就可以把握到赛道前景之广阔。 天眼查专业版数据显示&#xff0c;截至目前&#xff0c;我国拥有养老相关企业36.2万家&…

线上办理离婚快速离婚,无需双方见面异地可办

现在离婚有两种方式 一种是协议离婚&#xff0c;双方都同意的情况下&#xff0c;可以去民政局协议离婚&#xff0c;有30天冷静期&#xff0c;冷静期过后需要双方再次去民政局办理离婚手续。 另一种是诉讼离婚&#xff0c;一方不同意离婚&#xff0c;可以选择诉讼离婚。可以全…