SpringBoot项目详细整合邮箱服务

news2025/1/24 14:29:08

springboot 版本:2.6.3

Java版本:1.8

一、应用场景

  • 用户注册发送激活邮箱

  • 注册登录时用邮箱接收验证码

  • 用户密码重置

  • 向用户发送相关系统消息

二、添加依赖

<!--    邮箱 -->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

三、邮箱配置:以qq邮箱为例

  1. 在qq邮箱中开启smtp服务并获取授权码。在设置->账号路径下。

    在这里插入图片描述

  2. 在spingboot中配置邮件信息

    spring:
      # 邮箱验证配置
      mail:
        host: smtp.qq.com # smtp 服务主机
        protocol: smtp  # smtp 协议
        default-encoding: UTF-8
        username: xxx@qq.com # 邮箱
        password: xxx   # 授权码
        nickname: xxx # 发邮件时显示的昵称
        test-connection: false  
        properties:
          mail:
            smtp:
              auth: true
              starttls:
                enable: true
                required: true
    

    注: test-connection 字段代表是否在项目启动时验证邮箱服务是否可用,如果设置成true,则只有在邮箱服务可用时项目才能启动成功;而设置成false 时只有在使用邮箱服务时才会检测邮箱服务是否可用。

    四、邮箱API使用

    1. SimpleMailMessage

      邮件类,用来设置邮件的各部分内容,常用方法:

      // 设置发送人信息
      public void setFrom(String from) {
              this.from = from;
          }
      // 设置收件人信息:邮箱
       public void setTo(String to);
      // 设置邮件主题
      public void setSubject(String subject) {
              this.subject = subject;
          }
      // 设置邮件内容
      public void setText(String text) {
              this.text = text;
          }
      
    2. JavaMailSender 接口

      发送邮件的类,可以看到它的send 方法接收的都是MimeMessage 类型,而我们的是SimpleMailMessage类型,其实是使用的MailSender 接口中的方法。

      public interface JavaMailSender extends MailSender {
          MimeMessage createMimeMessage();
      
          MimeMessage createMimeMessage(InputStream contentStream) throws MailException;
      
          void send(MimeMessage mimeMessage) throws MailException;
      
          void send(MimeMessage... mimeMessages) throws MailException;
      
          void send(MimeMessagePreparator mimeMessagePreparator) throws MailException;
      
          void send(MimeMessagePreparator... mimeMessagePreparators) throws MailException;
      }
      
      public interface MailSender {
          void send(SimpleMailMessage simpleMessage) throws MailException;
      
          void send(SimpleMailMessage... simpleMessages) throws MailException;
      }
      

    五、验证邮箱服务

    1. 编写一个发送验证码的controller

      @RestController
      @Api(value = "v1", tags = "6.GeoFriend 邮件相关接口")
      @RequestMapping("/api/v1")
      public class EmailAPI {
      
          @Autowired
          private JavaMailSender mailSender;
      
          @Autowired
          private RedisGeoDao redisGeoDao;
      
          /**
           * 邮箱
           */
          @Value("${spring.mail.username}")
          private String sender;
      
          /**
           * 获取发件人昵称
           */
          @Value("${spring.mail.nickname}")
          private String nickname;
      
      
          /**
           * 发送验证码
           * @param email 收件人
           * @return
           */
          @PostMapping("/email/code")
          public ResultBean sendCode(@RequestBody EmailParam email){
      
              if(!NumberUtil.isEmail(email.getEmail())){
                  return ResultBeanGenerator.error(ServiceResultEnum.LOGIN_NAME_IS_NOT_EMAIL.getResult());
              }
              SimpleMailMessage message = new SimpleMailMessage();
              message.setFrom(nickname + '<' + sender + '>');
              message.setTo(email.getEmail());
              message.setSubject("请查收验证码~");
      
              String code = RandomUtil.randomNumbers(6);
              String content = "【验证码】您的验证码为:" + code + " 。 验证码五分钟内有效,逾期作废。\n\n\n" +
                      "------------------------------\n\n\n" +
                      "更多信息可访问:\n\n" +
                      "https://blog.csdn.net/qq_44957574?type=blog\n\n";
      
              message.setText(content);
              mailSender.send(message);
      
              redisGeoDao.addCode(email.getEmail(), code);
      
              return ResultBeanGenerator.success("验证码发送成功!");
          }
      }
      
      1. 使用postman发送请求

        在这里插入图片描述

      2. 查看邮箱是否发送

      在这里插入图片描述

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

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

相关文章

【单片机毕业设计选题24098】-校园智能绿植浇灌系统

系统功能: 1. 手机通过蓝牙模块显示系统信息 2. OLED模块显示系统信息 3. DHT11采集温湿度 4. 继电器模块控制水泵 5. 按键调节湿度设定阈值 6. 土壤湿度传感器模块采集土壤湿度 7. 光照传感器采集光照值 系统分为手动和自动模式&#xff0c;上电默认为自动模式&#x…

scratch魔法门 2024年6月scratch四级 中国电子学会图形化编程 少儿编程等级考试四级真题和答案解析

目录 scratch魔法门 一、题目要求 1、准备工作 2、功能实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、pyt…

2024/8/4 维高-STD60N驱动器(伺服)---客户反馈:电机异响

步进电机 MHS1A86-60B85B &#xff0c;额定电流6A 步骤一&#xff1a;设置额定电流 std60n驱动器拔码全部为off&#xff08;后台设置&#xff09;&#xff0c;伺服后台连上后设置h00-11按电机铭牌进行 设置下额定电流 步骤二&#xff1a;最好设置峰值电流一…

Jenkins未授权访问漏洞

Jenkins未授权访问漏洞 默认情况下 Jenkins面板中用户可以选择执行脚本界面来操作一些系统层命令&#xff0c;攻击者可通过未授权访问漏洞或者暴力破解用户密码等进入后台管理服务&#xff0c;通过脚本执行界面从而获取服务器权限。 漏洞复现 步骤一:使用以下fofa语法进行产品…

GUI:Tkinter(一)

Tkinter文档 一&#xff0c;Tkinter基本流程 1. 创建应用程序主窗口对象 from tkinter import * window Tk() window.mainloop()#开启主循环 2. 在主窗口中&#xff0c;添加各种可视化组件&#xff0c;比如&#xff1a;按钮&#xff08;Button&#xff09;、文本框&#x…

Java中Lambda表达式的使用

Lambda的背景 Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。 Lambda 表达式&#xff08;Lambda expressio…

用户看广告获取密码访问网页内容流量主模式源码

简介&#xff1a; 全开源付费进群流量主模式&#xff0c;用户看广告获取密码访问网页内容&#xff0c;网站生成内容&#xff0c;用户需要浏览内容跳转至小程序&#xff0c;观看广告后获取密码&#xff0c;输入密码查看网页内容。 与之前得9.9付费进群区别就是内容体现在了网页…

【信创】国产操作系统上使用的万能打印驱动 _ 统信 _ 麒麟 _ 中科方德

往期好文&#xff1a;统信UOS服务器离线安装postgresql数据库 Hello&#xff0c;大家好&#xff01;今天给大家带来一款在信创终端操作系统上使用的万能打印驱动——瑞印万能打印驱动。这款驱动程序是国产操作系统下的通用打印驱动程序&#xff0c;具有很高的兼容性和广泛的功能…

图论:1857. 有向图中最大颜色值(拓扑排序+动态规划)

文章目录 1.问题分析2.代码解析2.1 代码步骤1. 初始化数据结构2. 构建图和入度数组3. 初始化队列4. 拓扑排序和动态规划5. 检查是否存在环并返回结果 3. 问题扩展1. 最长路径问题&#xff08;DAG&#xff09;2. 最短路径问题&#xff08;DAG&#xff09;3. 最大路径和问题4. 路…

科普文:微服务之Spring Cloud 客户端负载均衡组件LoadBalancer替代Ribbon

概叙 负载均衡 负载均衡的两个基本点&#xff1a; 选择哪个服务器来处理客户端请求。将客户端请求转发出去。 一个核心原理&#xff1a;通过硬件或软件的方式维护一个服务列表清单。当用户发送请求时&#xff0c;会将请求发送给负载均衡器&#xff0c;然后根据负载均衡算法从…

中仕公考:2024年重庆市属事业单位招聘公告

本次公开招聘市属事业单位工作人员218名&#xff0c;报考者可登录重庆市人力资源和社会保障局官网“事业单位公开招聘”栏查阅。 (一)可报考的条件 1.具有中华人民共和国国籍; 2.遵守中华人民共和国宪法和法律&#xff0c;具有良好的品行; 3.身体健康&#xff0c;符合事业单…

OGG同步目标端中文乱码处理

现象说明&#xff1a; 源端字符集&#xff1a;AMERICAN_AMERICA.ZHS16GBK 目标端字符集&#xff1a;AMERICAN_AMERICA.AL32UTF8 源端同步过来的数据显示中文乱码。 查询数据库表中含有乱码的字段&#xff1a; select * from xx.xxxx a where to_char(a.crtopetime,yyyy-mm-…

一些不被人熟知,但又很好用的HTML属性

HTML&#xff08;超文本标记语言&#xff09;具有多种属性&#xff0c;可用于增强我们的网页的结构和功能。 下面我就给大家介绍一下&#xff0c;一些很好用的HTML属性&#xff0c;但是不被人熟知的HTML属性 contenteditable&#xff1a; 这个属性使我们的元素变的可编辑。用…

谷粒商城实战笔记-126-全文检索-ElasticSearch-整合-测试保存

文章目录 一&#xff0c;谷粒商城实战笔记-126-全文检索-ElasticSearch-整合-测试保存1&#xff0c;在Elasticsearch的配置类中增加通用设置2&#xff0c;索引数据3&#xff0c;验证 一&#xff0c;谷粒商城实战笔记-126-全文检索-ElasticSearch-整合-测试保存 1&#xff0c;在…

环境搭建:全面详尽的 MongoDB Shell MongoDB Server介绍、安装、验证与配置指南(以 Windows 系统为主)

环境搭建&#xff1a;全面详尽的 MongoDB Shell & MongoDB Server介绍、安装、验证与配置指南&#xff08;以 Windows 系统为主&#xff09; MongoDB 是一个基于文档的 NoSQL 数据库&#xff0c;以其高性能、灵活性和可扩展性而受到广泛欢迎。本文将带您完成 MongoDB 的安装…

数据结构第十讲:二叉树OJ题

数据结构第十讲&#xff1a;二叉树OJ题 1.单值二叉树2.相同的树3.对称二叉树4. 另一棵树的子树5.二叉树的前序遍历6.二叉树的中序遍历7.二叉树的后序遍历8.二叉树的构建及其遍历9.二叉树选择题9.1二叉树性质19.2二叉树性质29.3二叉树性质三9.4选择题 1.单值二叉树 链接: OJ题链…

Java-----二叉树

1.树型结构 1.1概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看 起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。它具有以下的特点&#xff1a; 1.有…

本地文件上传

java本地文件上传 1、FileController /*** author: yc* des: 文件接口* date: 2024/8/4 11:11*/ RestController RequestMapping("/file") public class FileController {Resourceprivate FileService fileService;PostMapping("/upload")public Respon…

智能交通(6)——DQN代码复现

伪代码 如算法描述&#xff0c;dqn即深度q网络和记忆池 初始化记忆池和可以容纳的数量N 动作价值函数Q使用随机权重进行初始化。 目标动作价值函数Q′也使用相同的权重进行初始化&#xff0c;即Q′Q。 循环训练M局 初始化和预处理观察到的状态 每局循环训练T步 采用e的概…

【Scene Transformer】scene transformer论文阅读笔记

文章目录 序言(Abstract)(Introduction)(Related Work)(Methods)(Scene-centric Representation for Agents and Road Graphs)(Encoding Transformer)(Predicting Probabilities for Each Futures)(Joint and Marginal Loss Formulation) (Results)(Discussion)(Questions) sce…