【Springboot】集成QQ邮箱信息发送

news2024/11/24 4:37:25

系列文章目录

文章目录

  • 系列文章目录
  • 前言
    • 添加Maven依赖
    • QQ邮箱开启POP服务
    • 配置application.properties文件
    • Controller层
    • 编写 vue前端(也可以直接省略)


前言

这篇博客用于简单实现SpringBoot中发送请求,用户可以收到邮件。


添加Maven依赖

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

QQ邮箱开启POP服务

进入QQ邮箱界面, 打开邮箱–设置–账户
在这里插入图片描述
找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务如果没有开启,选择管理服务
在这里插入图片描述

点击进入后,点击“生成授权码”,后面按照QQ邮箱提示的操作,把授权码复制下来,后期会在项目配置文件中配置。
在这里插入图片描述

需要发送手机短信给QQ邮箱,然后才能生成QQ邮箱授权码
生成的授权码就是application.properties中的email.password值,application.properties具体内容如下:

配置application.properties文件

# # smtp用户名
spring.mail.username= #写绑定授权码的QQ邮箱,一般做邮箱发送测试就是写你自己的邮箱。
# # 服务授权码
spring.mail.password=  # 输入QQ邮箱给你的授权码,这个授权码要和上面的邮箱对应。
#smtp服务器,下面的其实都不用变
spring.mail.host=smtp.qq.com
spring.mail.properties.mail.smtp.ssl.enable=true
# 默认的邮件编码为UTF-8
spring.mail.default-encoding=UTF-8

Controller层

Spring邮箱验证测试类,尽量不要使用测试类,即·使用@Test注解测试。容易出现空指针异常。测试邮箱发送可以使用Controller方法,最后我们使用PostMan进行接口测试:
Controller类如下:

import com.feng.generation_design.entity.ApiResult;
import com.feng.generation_design.util.ApiResultHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.web.bind.annotation.*;
@RestController
public class EmailController {
    //存储随机生成的校验码
    private String cdoe_store = null;
    @Autowired(required = false)
    private JavaMailSender sender; // 引入Spring Mail依赖后,会自动装配到IOC容器    
@GetMapping("/send")
    public ApiResult sendEmail() {
        String code = (Math.random() + "").substring(2, 8);	//生成6位随机数
        cdoe_store = code;
        String email = "xxx@qq.com";	//你想发给哪个邮箱
        SimpleMailMessage message = new SimpleMailMessage();
        message.setSubject("来自题库系统的提示"); // 发送邮件的主题
        message.setText("您好,您正在操作敏感信息,需要核验您的身份,您收到的验证码为:" + code); // 邮件的内容
        message.setTo(email); // 指定要接收邮件的用户邮箱账号
        message.setFrom("xxx@qq.com"); // 邮件发送方,也就是配置文件中的邮件地址。
        sender.send(message); // 调用send方法发送邮件
        return ApiResultHandler.buildApiResult(200, "邮件发送成功!", null);
}

关于@Autowired(required=false)的使用

打开PostMan,我们对接口进行测试,选择“GET"方式,并输入url:localhost:8080/send,不传入任何参数,点击"Send".

在这里插入图片描述

上面其实用PostMan就可以直接看到请求结果了,用户也能接受到邮件。但是为了可视化性更好,我们编写一个具有发送邮件功能的按钮,请求成功后会有提示。

前端使用vue,做一个简单的发送邮件请求的按钮。

编写 vue前端(也可以直接省略)

<template>
  <div>
    <el-button @click="sendEmail()" type="text" size="large"
      >生成邮件</el-button
    >
  </div>
</template>
<script>
export default {
  data() {
    return {};
  },
  methods: {
    sendEmail() {
      console.log("执行");
      //如果你的项目中使用cookies存储用户信息,可以使用当前用户存在系统cookie中的email值 作为邮件接收对象。
      //   let teacher_email = this.$cookies.get("c_email");

      this.$axios({
        url: `/api/send`,
      })
        .then((res) => {
          if (res.status === 200) {
            console.log(res);
            this.$message({
              type: "success",
              message: "邮件发送成功,请注意查收!",
            });
          }
        })
        .catch((error) => {
          this.$message.error("邮件发送失败!!");
        });
    },
  },
};
</script>
<style></style>

有人可能会问,上面的/api啥意思,这个其实是在前端定义的,这里我就省略不写定义的地方了。这里实际上是对localhost:8080端口号的另称,不然前端的请求都要加上个localhost:8080得多麻烦!

上面UI用的是ElementU控件。写得很简单。
在这里插入图片描述
上面写的是text形式的按钮。点击后,如果请求数据成功,会提示:
在这里插入图片描述

邮件长这样:
在这里插入图片描述


其实这里可能会有小伙伴问,为什么这边是res.status呢?其实这里需要具体看,后端传过来的返回数据格式是什么样的。我们打开控制台(F12),(输出已经定义在我上面写的方法里了。)可以发现后端返回的数据如下:
在这里插入图片描述

res下面有status属性,所以我们前端如果想要获取到status,就用res.status来接收,200代表数据请求成功。
如果不清楚前端如何接收,可以在前端使用console.log(res);或者看看控制台输出的内容是什么。根据控制台打印的属性名获取即可。

还会继续更新。

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

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

相关文章

ISIS 实验

(1)拓扑图 2&#xff09;需求&#xff1a; -实现PC1和PC2的通信 3&#xff09;配置步骤&#xff1a; -配置接口IP地址 -开启ISIS---类似于在OSPF中创建进程 -配置NET地址---类似于在OSPF中创建区域&#xff0c;指定Router-id -在接口上启用ISIS--类似于在OSPFv2中用ne…

SKNet讲解

SKNet讲解 0. 引言1. 网络结构1.1 Split部分1.2 Fuse部分1.3 Select部分1.4 三分支的情况 2. SKNet网络体系结构3. 分析与解释4. 代码总结 0. 引言 视皮层神经元的感受野大小受刺激的调节&#xff0c;即对不同刺激&#xff0c;卷积核的大小应该不同&#xff0c;但在构建CNN时一…

<DB2>《DB2创建分区表及相关操作》(精华)

《DB2创建分区表及相关操作》 1 基本概念2 操作2.1 查看数据库中存在的分区表2.2 查看分区表详细2.3 断开对数据表的访问连接2.4 备份数据2.5 拆离分区2.6 添加分区2.7 导入数据2.8 校验前后数据2.9 删除临时表数据 1 基本概念 当表中的数据量不断增大&#xff0c;查询数据的速…

使用Kettle实现数据排序

一、Kettle的安装 1.下载Kettle的安装包文件 在Windows系统中打开浏览器&#xff0c;访问Kettle官网&#xff08;https://sourceforge.net/projects/pentaho/&#xff09;&#xff0c;下载Kettle安装文件pdi-ce-9.1.0.0-324.zip。 或者在我的百度网盘分享里面下载 链接&…

【软件测试】软件测试总结笔记(2)

软件测试过程&#xff08;内容&#xff09; 1.单元测试基本概念定义⭐单元测试环境⭐单元测试内容单元测试用例的设计思路⭐单元测试的过程 2. 集成测试集成测试内容集成测试优点⭐集成测试层次集成测试方法Drivers and Stubs ⭐集成策略&#xff08;基于分解的集成&#xff09…

crontab定时任务介绍

1 crontab概述 crontab是linux操作系统上用来设置定时任务的基础命令&#xff0c;是基于crond服务实现任务调度执行。 当安装完成操作系统后&#xff0c;默认会安装crond服务及其附属命令&#xff0c;并且会自动启动crond进程&#xff0c;crond进程每分钟会定期检查是否有要执…

Python量化交易:策略创建运行流程

学习目标 目标 知道策略的创建和运行知道策略的相关设置知道RQ的策略运行流程应用 无 1、体验创建策略、运行策略流程 1.1 创建策略 1.2 策略界面 2、 策略界面功能、运行介绍 2.1 一个完整的策略需要做的事情 选择策略的运行信息&#xff1a; 选择运行区间和初始资金选择回…

水库大坝安全问题有哪些?

我国现有水库大坝9.8万余座&#xff0c;80%水库大坝修建于上世纪50至70年代&#xff0c;受经济、技术等历史因素的影响&#xff0c;存在坝体结构破损、坝基渗漏、坝体渗漏、坝面变形等严重的安全隐患。 一、水库大坝的安全问题主要包括以下几个方面&#xff1a; 1.坝体结构破损…

“微商城”项目(3页面布局)

1.设置标题 设置页面头部标题&#xff0c;方便告诉用户当前显示的是哪一个页面。编辑src\router.js文件&#xff0c;示例代码如下。 routes: [{ path: /, redirect: /home, meta: { title: 首页 } },{ path: /home, component: Home, name: home, meta: { title: 首页 } } ] …

ConditionObject的await方法分析

ConditionObject的await方法分析 判断当前线程是否中断&#xff0c;中断直接抛出非法监视器状态异常要是没有中断则通过addConditionWaiter()方法将该节点加入到Condition的单向链表中通过fullyRelease(node)方法一次新释放掉锁资源初始化一个状态模式为0的标记执行while判断&…

Linux基础【Linux开发】

Linux基础【Linux开发】 1.Linux系统结构2.Linux内核下载流程3. 文本编辑器4. 软件包管理5. shell命令5.1 shell作为命令语言5.2 shell作为编程语言 6. makefile工程管理文件 1.Linux系统结构 2.Linux内核下载流程 Linux内核官方网站&#x1f447; 3. 文本编辑器 vim 老…

TextCNN:用于文本分类的CNN网络

参考资料&#xff1a;文本分类之TextCNN与DPCNN TextCNN 是在2014年的论文 《Convolutional Neural Networks for Sentence Classification》中提出来的。 以下是TextCNN的网络结构&#xff1a; &#xff08;1&#xff09;TextCNN的第一层为 Embedding 层 Embedding 层的输入…

C++的右值引用和移动语义

1.左值和右值 在C中&#xff0c;每个表达式或者是左值&#xff0c;或者是右值。 左值(lvalue)&#xff1a;可以出现在赋值表达式左侧的值&#xff0c;例如变量名a、数据成员a.m、解引用表达式*p等。左值可以被赋值和取地址。右值(rvalue)&#xff1a;只能出现在赋值表达式右侧…

十七、多线程(下)

文章目录 一、线程互斥&#xff0c;它是对的&#xff0c;但是不合理&#xff08;饥饿问题&#xff09;——同步二、条件变量&#xff08;一&#xff09;概念&#xff08;二&#xff09;条件变量接口1. pthread_cond_init 创建条件变量2. pthread_cond_wait 等待条件满足3. pthr…

类的成员之:构造器(构造方法)

1.构造器的特征&#xff1a; 它具有与类相同的名称它不声明返回值类型。&#xff08;与声明为void不同&#xff09;不能被static、final、synchronized、abstract、native修饰&#xff0c;不能有return语句返回值 2.构造器的作用&#xff1a; 1.创建对象2.初始化对象的…

StackLLaMA: A hands-on guide to train LLaMA with RLHF

Paper name StackLLaMA: A hands-on guide to train LLaMA with RLHF Paper Reading Note Project URL: https://huggingface.co/blog/stackllama Code URL: https://huggingface.co/docs/trl/index TL;DR Huggingface 公司开发的 RLHF 训练代码&#xff0c;已集成到 hugg…

产品设计-产品设计五要素

概念介绍 产品设计五要素分别是&#xff1a;战略层、范围层、结构层、框架层、表现层。自上而下的分析可用来分析已有的产品&#xff0c;自下而上分析则可以用来创造新的产品。下面是各个层级所包括的内容&#xff1a; 战略层&#xff1a;产品目标和用户需求&#xff08;做什…

【STL(2)】

STL&#xff08;2&#xff09; 知识点回顾函数对象函数对象理解系统的仿函数仿函数应用 容器适配器stackdeque queuepriority_queue mapmap使用插入访问下标访问的应用&#xff1a;计算文件中单词的个数 知识点回顾 在STL库中存在三个容器适配器&#xff0c;stack - queue - p…

西门子200系列PLC学习课程大纲(课程筹备中)

西门子200系列PLC学习课程大纲如下表所示&#xff0c;共106课&#xff0c;关注我&#xff0c;让你从菜鸟变大神。 第1课西门子200PLC概述S7-200 PLC新特性是什么第2课S7-200 PLC的CPU介绍第3课S7-200 PLC编程软件介绍第4课S7-200 PLC通信方式有哪些第5课S7-200 PLC显示面板介绍…

6.1——我在CSDN的创作纪念日

文章目录 ⭐前言⭐相遇CSDN⭐切换到编程赛道的契机&#x1f496; 好好的美工为什么切换编程赛道&#x1f496; 转换编程赛道的催化剂 ⭐写博客的目的——写给未来的自己&#x1f496; 初衷——为学习铺路&#x1f496; 博客是灯——照亮前行的路&#x1f496; 博客是路——互联…