QQ邮箱发送工具类的实现

news2024/12/23 20:22:39

我们在日常开发中,需要实现一个对邮箱的发送,今天就实现邮箱的发送工具类,只需要一些注册邮箱之后的配置即可,我这边使用的是qq邮箱

0.加上依赖

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

1.配置yml文件(需要到官网上去注册,不知道怎么获取的可以看视频或者问chatGPT:https://mail.qq.com/QQ邮箱,为亿万用户提供高效稳定便捷的电子邮件服务。你可以在电脑网页、iOS/iPad客户端、及Android客户端上使用它,通过邮件发送3G的超大附件,体验文件中转站、日历、记事本、漂流瓶等特色功能。QQ邮箱,常联系。icon-default.png?t=N7T8https://mail.qq.com/

spring:                         # Spring Boot应用程序配置的根节点
   mail:                        # 邮件相关配置
    username:                   # 你自己的QQ邮箱的用户名,需要填写你的QQ邮箱地址
    password:                   # 你自己的QQ邮箱的密钥/密码,需要填写你的QQ邮箱登录密码
    host: smtp.qq.com            # SMTP服务器主机名,这里设置为QQ邮箱的SMTP服务器
    port: 465                   # SMTP服务器端口,通常情况下使用SSL的SMTP协议使用465端口
    protocol: smtp              # 使用SMTP协议发送邮件

    properties:                 # 邮件相关的属性配置
      mail:                     # 邮件协议属性配置
        smtp:                   # SMTP协议属性配置
          ssl:                  # SSL/TLS属性配置
            enable: true         # 启用SSL,表示使用加密传输邮件
          auth: true             # 启用SMTP身份验证,需要提供用户名和密码
          starttls:             # STARTTLS属性配置,用于在未加密连接上启用TLS
            enable: true        # 启用STARTTLS
            required: true      # 要求必须使用STARTTLS
          socketFactory:        # Socket工厂属性配置,用于SSL连接
            port: 465           # SSL连接的端口,与SMTP服务器的端口一致
            class: javax.net.ssl.SSLSocketFactory  # 使用的Socket工厂类,通常用于SSL连接

# 请确保填写你自己的QQ邮箱地址和密码,以及确保QQ邮箱允许使用SMTP服务来发送邮件

2.写一个发送邮箱工具类

@Component
public class MailUtil {

    private static MailUtil INSTANCE = new MailUtil();

    @Resource
    JavaMailSender mailSender;

    @Resource
    JavaMailSender javaMailSender;

    @PostConstruct
    public void init(){
        INSTANCE.mailSender = mailSender;
    }

    /**
     * 发送简单邮件
     *
     * @param subject 主题
     * @param content 内容
     * @param from 发件人
     * @param to      收件人
     */
    public void sendSimpleMail(String subject,String content,String from,String[] to){
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(from);
        message.setTo(to);
        // 主题
        message.setSubject(subject);
        // 邮件正文
        message.setText(content);
        message.setSentDate(new Date());
        // 发送邮件
        INSTANCE.mailSender.send(message);
    }
    public void sendMimeMail(String subject,String content,String from,String[] to) throws MessagingException {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        // 构建一个邮件对象
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
        // 设置邮件主题
        helper.setSubject(subject);
        // 设置邮件发送者,这个跟application.yml中设置的要一致
        helper.setFrom(from);
        helper.setTo(to);
        // 设置邮件发送日期
        helper.setSentDate(new Date());
        // 设置邮件的正文 true:是html文件
        helper.setText(content,true);
        // 发送邮件
        javaMailSender.send(mimeMessage);
    }

}

3.编写controller控制器接口

@RestController
@Api(tags = "邮箱发送")
@RequestMapping("/mail")
public class MailServlet {
    @Resource
    private MailUtil mailUtil;

    @PostMapping("/to")
    @ApiOperation("发送邮件")
    @ApiImplicitParams({@ApiImplicitParam(name = "subject", value = "邮件主题"), @ApiImplicitParam(name = "content", value = "邮件内容")
            , @ApiImplicitParam(name = "from", value = "发送邮件的QQ邮箱"), @ApiImplicitParam(name = "to", value = "要发送到的QQ邮箱,用,隔开")})
    public R to(String subject, String content, String from, String to) {
        String[] split = to.split(",");
        try {
            mailUtil.sendSimpleMail(subject, content, from, split);
            return R.ok("发送成功");
        } catch (Exception e) {
            e.fillInStackTrace();
            return R.fail("发送失败");
        }
    }

    @PostMapping("/tof")
    @ApiOperation("发送富文本邮件")
    @ApiImplicitParams({@ApiImplicitParam(name = "subject", value = "邮件主题"), @ApiImplicitParam(name = "content", value = "邮件内容<html>格式")
            , @ApiImplicitParam(name = "from", value = "发送邮件的QQ邮箱"), @ApiImplicitParam(name = "to", value = "要发送到的QQ邮箱,用,隔开")})
    public R tof(String subject, String content, String from, String to) {
        String[] split = to.split(",");
        try {
            mailUtil.sendMimeMail(subject, content, from, split);
            return R.ok("发送成功");
        } catch (Exception e) {
            e.fillInStackTrace();
            return R.fail("发送失败");
        }
    }
}

最后就可以发送邮箱了,今天的分享就到这里了

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

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

相关文章

Docker单机部署OceanBase

文章目录 说明机器软硬件要求指导文档本次部署环境说明 OceanBase单机部署&#xff08;Docker&#xff09;一&#xff1a;拉取 OceanBase 数据库相关镜像二&#xff1a;启动 OceanBase 数据库实例完整启动日志展示 三&#xff1a;连接实例遇到报错&#xff1a;没有mysql客户端 …

【lesson14】MySQL表的基本查询retrieve(读取)1

文章目录 表的基本操作介绍retrieveselect列建表基本测试 where子句建表基本测试 表的基本操作介绍 CRUD : Create(创建), Retrieve(读取)&#xff0c;Update(更新)&#xff0c;Delete&#xff08;删除&#xff09; retrieve select列 建表 基本测试 插入数据 全列查询 …

GoogLeNet(pytorch)

亮点与创新&#xff1a; 1. 引入Inception基础结构 2. 引入PW维度变换卷积&#xff0c;启迪后续参数量的优化 3. 丢弃全连接层&#xff0c;使用平均池化层&#xff08;大大减少模型参数&#xff09; 4. 添加两个辅助分类器帮助训练&#xff08;避免梯度消失&#xff0c;用于…

智能电气柜环境监测系统

智能电气柜环境监控系统是一种基于传感器技术和物联网技术的智能化监控系统&#xff0c;用于对电气柜内的环境参数进行实时监测和管理。依托智慧电力运维工具-电易云&#xff0c;通过安装在电气柜内的多个传感器&#xff0c;实时采集电气柜内的温度、湿度、氧气浓度、烟雾等关键…

windows redis 允许远程访问配置

安装好windows版本的redis&#xff0c;会以服务方式启动&#xff0c;但是不能远程访问&#xff0c;这个时候需要修改配置。redis安装路径下会有2个配置文件&#xff0c;究竟需要怎么修改才能生效呢&#xff1f;看下图 这里的redis服务指定了是redis.windows-service.conf文件&…

java_web_电商项目

java_web_电商项目 1.登录界面2.注册界面3. 主界面4.分页界面5.商品详情界面6. 购物车界面7.确认订单界面8.个人中心界面9.收货地址界面10.用户信息界面11.用户余额充值界面12.后台首页13.后台商品增加14.后台用户增加15.用户管理16.源码分享1.登录页面的源码2.我们的主界面 1.…

Xml与Json格式在线转换器

具体请前往&#xff1a;在线Json转Form表单参数工具

计算机网络(四)

九、网络安全 &#xff08;一&#xff09;什么是网络安全&#xff1f; A、网络安全状况 分布式反射攻击逐渐成为拒绝攻击的重要形式 涉及重要行业和政府部门的高危漏洞事件增多。 基础应用和通用软硬件漏洞风险凸显&#xff08;“心脏出血”&#xff0c;“破壳”等&#x…

springMVC-@RequestMapping

基本介绍 RequestMapping注解可以指定控制器/处理器的某个方法的请求的url, 示例 &#xff08;结合springMVC基本原理理解&#xff09; Controller public class UserHandler {RequestMapping(value "/login")public String login() {System.out.println("登…

JOSEF约瑟 静态双位置继电器 DPR-35 DC110V柜内固定安装,板前接线

系列型号&#xff1a; DPR-20双位置继电器&#xff1b;DPR-31双位置继电器&#xff1b; DPR-32双位置继电器&#xff1b;DPR-33双位置继电器&#xff1b; DPR-34双位置继电器&#xff1b;DPR-35双位置继电器&#xff1b; DPR-11双位置继电器&#xff1b;DPR-12双位置继电器…

【数据结构和算法】--队列的特殊结构-循环队列

目录 循环队列的结构循环队列的实现循环队列的创建循环队列为空判断循环队列为满判断入队出队返回循环队列首元素返回循环队列尾元素释放循环队列 循环队列的结构 循环队列是队列的一种特殊结构&#xff0c;它的长度是固定的k&#xff0c;同样是先进先出&#xff0c;理论结构是…

飞天使-docker知识点6-容器dockerfile各项名词解释

文章目录 docker的小技巧dockerfile容器为什么会出现启动了不暂停查看docker 网桥相关信息 docker 数据卷 docker的小技巧 [rootlight-test playbook-vars[]# docker inspect -f "{{.NetworkSettings.IPAddress}}" d3a9ae03ae5f 172.17.0.4docker d3a9ae03ae5f:/etc…

RK3399平台开发系列讲解(内核入门篇)什么是函数调用栈

🚀返回专栏总目录 文章目录 一、什么是函数调用栈二、函数调用栈解析三、什么是stack overflow沉淀、分享、成长,让自己和他人都能有所收获!😄 📢在开发软件的过程中我们经常会遇到错误,如果你用 Google 搜过出错信息,那你多少应该都访问过Stack Overflow这个网站。作…

三、JS逆向

一、JS逆向 解释&#xff1a;在我们爬虫的过程中经常会遇到参数被加密的情况&#xff0c;这样只有先在前端搞清楚加密参数是怎么生成的才能继续我们的爬虫&#xff0c;而且此时我们还需要用python去执行这个加密的过程。本文主要讲怎么在浏览器调试JS&#xff0c;以及Python执…

网络(七)路由协议以及相关配置

目录 一、路由器的工作原理 二、路由表的形成 2.1 直连网段 2.2 非直连网 2.3 路由表解析 2.3.1 查看路由表 2.3.2 解析 三、静态路由和默认路由 1. 静态路由 1.1 定义 1.2 特点 2. 默认路由 2.1 定义 2.2 特点 四、静态路由和默认路由的配置 1. 静态路由配置…

很抱歉,Midjourney,但Leonardo AI的图像指导暂时还无人能及…至少目前是这样

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

汽车充电协议OpenV2G的平替cbexigen!!

纵所周知&#xff0c;开源欧规协议 CCS 的 OpenV2G 协议不支持 ISO15118-20:2022 协议&#xff0c;并且软件维护者已经明确不在进行该软件的维护。 前几天在 Github 上冲浪发现了一个宝藏开源项目&#xff0c;完美的实现的 OpenV2G 的 Exidizer 工具的功能&#xff1a;cbexigen…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《考虑灵活性资源传输精细化建模的配电网优化运行》

这个标题表达的是关于配电网优化运行的一个概念&#xff0c;其中考虑了灵活性资源传输的精细化建模。让我们逐个解读关键词&#xff1a; 考虑灵活性资源传输&#xff1a;这指的是在配电网优化运行中考虑到不同类型的灵活性资源的传输。灵活性资源包括可再生能源、储能系统、柔性…

2044回文字符串(C语言)

目录 一&#xff1a;题目 二&#xff1a;思路分析 1.什么是回文&#xff1f; 2.判断回文&#xff1a; 三&#xff1a;代码 一&#xff1a;题目 二&#xff1a;思路分析 1.什么是回文&#xff1f; 最简单的理解方式就是一个字符串正着写和倒着写一样 2.判断回文&#xff1…

【C语言(十)】

字符函数和字符串函数 一、字符分类函数 C语言中有⼀系列的函数是专门做字符分类的&#xff0c;也就是⼀个字符是属于什么类型的字符的。这些函数的使用都需要包含⼀个头文件是 ctype.h 这些函数的使用方法非常类似&#xff0c;我们就讲解⼀个函数的事情&#xff0c;其他的非…