SpringBoot实现 内置 定时 发送邮件功能

news2024/11/16 15:47:06

在这里插入图片描述

前段时间因为公司用了定时任务,所以写了2篇定时任务的文章,一篇是正常如何在Springboot 编程中如何去使用quartz ,第二篇就是 正常业务性的增删改查,今天我们来看下如何使用 quartz 去定时给女朋友发邮件 ,结尾会放上完整代码

  • Springboot 在Java使用 定时任务
  • Springboot 使用quartz CRUD

在这里插入图片描述

首先你是不是要发邮件,那你就需要用到Springboot 整合邮件 ,导入下面三个依赖,当然如果你还想把给女朋友发的邮件存数据库 你还要加一个 MyBATIS 和 Mysql

    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>jakarta.mail</artifactId>
            <version>1.6.4</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>

我们导入好依赖之后

配置授权码

在这里插入图片描述

接下来需要配置一下 yam

# 配置你发邮件的 账号 
spring.mail.username=2509919428@qq.com
# 注意 这里不是密码 ,是授权码 
spring.mail.password=oqkesvkbzromecje
spring.mail.host=smtp.qq.com

#开启加密规则
spring.mail.properties.mail.smtp.ssl.enable=true

spring.mail.password 上面的 这一项不是密码 是授权码
这里我们以QQ邮箱为例 ,你需要得到一个 授权码

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
然后咱们发送邮件之后, 就可以了

在这里插入图片描述

配置任务

要使用定时任务,我们就需要定义任务 ,不懂的小伙伴可以去看我之前的文章,这里我们简单搞下


import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.util.Date;

@Slf4j
@Component
public class MailConfig {

    @Autowired
    JavaMailSenderImpl javaMailSender;

    @Scheduled(cron = "0/7 * * * * ?")
    @Bean
    public void loadBean() throws MessagingException {
        log.info("测试发送 邮件 ---------》 " + new Date());
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
        helper.setSubject("hello byc");
        helper.setText("<b style='color:red'>测试一个复杂邮件</b>", true);
        helper.addAttachment("1.jpg", new File("D:\\Computer\\图片\\Snipaste_2023-02-11_14-47-17.png"));
        helper.setTo("2509919428@qq.com");
        helper.setFrom("2509919428@qq.com");
        javaMailSender.send(mimeMessage);
    }
}

由于我们之前导入了依赖,所以可以直接用 MimeMessage 去发送邮件 ,上面的

  • @Scheduled(cron = "0/7 * * * * ?") 这就是核心,我们标注了这个注解就相当于 这个方法可以定时发送

MimeMessageHelper : 这个是发送邮件的复杂对象,我们可以看到 下面定义了 发送的内容 以及 发送的字体颜色, 还有图片 ,我们可以看到

在这里插入图片描述

  • 格式
/**
     * 在特定的时间执行
     * cron表达式
     * (1)0/2 * * * * ?   表示每2秒 执行任务
     * (1)0 0/2 * * * ?   表示每2分钟 执行任务
     * (1)0 0 2 1 * ?   表示在每月的1日的凌晨2点调整任务
     * (2)0 15 10 ? * MON-FRI   表示周一到周五每天上午10:15执行作业
     * (3)0 15 10 ? 6L 2002-2006   表示2002-2006年的每个月的最后一个星期五上午10:15执行作
     * (4)0 0 10,14,16 * * ?   每天上午10点,下午2点,4点
     * (5)0 0/30 9-17 * * ?   朝九晚五工作时间内每半小时
     * (6)0 0 12 ? * WED   表示每个星期三中午12点
     * (7)0 0 12 * * ?   每天中午12点触发
     * (8)0 15 10 ? * *   每天上午10:15触发
     * (9)0 15 10 * * ?     每天上午10:15触发
     * (10)0 15 10 * * ?   每天上午10:15触发
     * (11)0 15 10 * * ? 2005   2005年的每天上午10:15触发
     * (12)0 * 14 * * ?     在每天下午2点到下午2:59期间的每1分钟触发
     * (13)0 0/5 14 * * ?   在每天下午2点到下午2:55期间的每5分钟触发
     * (14)0 0/5 14,18 * * ?     在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
     * (15)0 0-5 14 * * ?   在每天下午2点到下午2:05期间的每1分钟触发
     * (16)0 10,44 14 ? 3 WED   每年三月的星期三的下午2:10和2:44触发
     * (17)0 15 10 ? * MON-FRI   周一至周五的上午10:15触发
     * (18)0 15 10 15 * ?   每月15日上午10:15触发
     * (19)0 15 10 L * ?   每月最后一日的上午10:15触发
     * (20)0 15 10 ? * 6L   每月的最后一个星期五上午10:15触发
     * (21)0 15 10 ? * 6L 2002-2005   2002年至2005年的每月的最后一个星期五上午10:15触发
     * (22)0 15 10 ? * 6#3   每月的第三个星期五上午10:15触发
     * */

接下来我们在Springboot 项目中加入注解

在这里插入图片描述

/**
 * 开启异步注解的功能
 * 开启定时任务的注解
 *
 * @author 全栈小刘
 */
@EnableScheduling
@EnableAsync
@SpringBootApplication
public class Demo4Application {

    public static void main(String[] args) {
        SpringApplication.run(Demo4Application.class, args);
    }


}

完整项目结构 ,当然 你也加一套增删改查进去,例如输入谁的邮箱开启定时任务 ,这样就会比枯燥的代码有趣许多

源码地址

下载好代码之后记得修改授权码尝试一下
在这里插入图片描述

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

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

相关文章

智能电子办公标牌解决方案

一、WiFi智能电子标牌 智能电子办公标牌将它放在任何地方&#xff0c;以可视化会议日程、约会信息、行动计划和协作任务&#xff0c;使团队能够更有效地工作并更好地利用空间。 优势&#xff1a; ● 超低功耗&#xff0c;充一次电管用一年&#xff0c;支持Type-C接口充电 ●…

Linux之进程

一.冯诺依曼体系 在计算机中&#xff0c;CPU&#xff08;中央处理器&#xff09;是不直接跟外部设备直接进行通信的&#xff0c;因为CPU处理速度太快了&#xff0c;而设备的数据读取和输入有太慢&#xff0c;而是CPU以及外设直接跟存储器&#xff08;内存&#xff09;打交道&am…

Python 之 Matplotlib 柱状图(竖直柱状图和水平柱状图)、直方图和饼状图

文章目录一、柱状图二、竖直柱状图1. 基本的柱状图2. 同位置多柱状图3. 堆叠柱状图三、水平柱状图1. 基本的柱状图2. 同位置多柱状图3. 堆叠柱状图四、直方图 plt.hist()1. 返回值2. 添加折线直方图3. 不等距分组4. 多类型直方图5. 堆叠直方图五、饼状图 pie()1. 百分比显示 pe…

初步使用MSYS2

在此镜像站点下载&#xff0c; https://mirror.tuna.tsinghua.edu.cn/help/msys2/ 根据资料&#xff0c; MSYS2 &#xff08;Minimal SYStem 2&#xff09; 是一个MSYS的独立改写版本&#xff0c;主要用于 shell 命令行开发环境。同时它也是一个在Cygwin &#xff08;POSIX …

FPGA 10M50DCF672C7G/10M50DCF672C8G/10M50DCF672I7G工业、汽车和消费应用

FPGA现场可编程门阵列 10M50DCF672C7G/10M50DCF672C8G/10M50DCF672I7G 封装FBGA672FBGA672封装图&#xff08;明佳达电子&#xff09;描述MAX 10器件是单芯片、非易失性低成本可编程逻辑器件(pld)&#xff0c;用于集成最优的系统组件集。MAX 10设备的亮点包括:内部存储双配置闪…

Spring Data JPA 中 CrudRepository 和 JpaRepository 的区别

1 问题描述Spring Data JPA 中&#xff0c;CrudRepository 和 JpaRepository 有何区别&#xff1f;当我在网上找例子的时候&#xff0c;发现它们可以互相替换使用。它们有什么不同呢&#xff1f;为什么你习惯用其中的一个而不是另一个呢&#xff1f;2 CrudRepository 和 JpaRep…

ArcGIS网络分析之发布网络分析服务(二)

在上一篇中讲述了如何构建网络分析数据集,本篇将讲解如何发布网络分析服务。本文将使用上一篇中建立的网络数据集,下载地址在上一篇博文的最后已给出。 之前我们已经实现了基于ArcMap中的网络分析,但是仅仅支持本地是万万不够的,这里我们的目的就是将我们建好的网络分析图…

【OJ】两个圆

&#x1f4da;Description: 直角坐标系内现有两个半径相等的圆&#xff0c;问两圆的位置关系。 位置关系有&#xff1a;重合&#xff0c;相切&#xff0c;相离&#xff0c;相交&#xff1b; 若两圆相交&#xff0c;需要求出两圆的重叠面积。 ⏳Input: 输入包含多组数据&a…

【项目精选】户籍管理系统(视频+论文+源码)

点击下载源码 当今社会人们生活质量越来越高&#xff0c;人们对生活品质的追求不断提升&#xff0c;对于孩子求学&#xff0c;变更住所等情况时有发生&#xff0c;因此对于户籍变动管理就显得十分重要&#xff0c;管理用户的户籍信息可以有效防止信息错乱&#xff0c;信息管理过…

百度沈抖:文心一言将通过百度智能云对外提供服务

2月17日&#xff0c;在2023 AI工业互联网高峰论坛上&#xff0c;百度智能云宣布“文心一言”将通过百度智能云对外提供服务&#xff0c;为产业带来AI普惠。 百度集团执行副总裁、百度智能云事业群总裁沈抖表示&#xff0c;“文心一言”是基于百度智能云技术打造出来的大模型&a…

A Time Series is Worth 64 Words(PatchTST模型)论文解读

摘要 我们提出了一种高效的基于Transformer设计的模型&#xff0c;用于多变量时间序列预测和自我监督表征学习&#xff08;self-supervised learning&#xff09;。它基于两个关键部分&#xff1a;1、将时间序列分隔成子序列级别的patches&#xff0c;作为Transformer的输入&a…

Allegro负片层不显示反盘的原因和解决办法

Allegro负片层不显示反盘的原因和解决办法 在用Allegro做PCB设计的时候,负片设计是较为常用的一种方式,有时会出现打开负片层却看不到反盘的情况,如下图 L2层是负片层 L2层仍然只能看到盘 如何才能看到反盘显示的效果,具体操作如下 首先确定L2层层叠里面设置的是负片

java ssm爱宠宠物医院挂号预约系统管理系统设计与实现

本课题所实现的宠物医院网站是基于网页&#xff0c;它可以实现网上预约挂号&#xff0c;评价等基本功能。用户只要手边有一部手机或者一台电脑&#xff0c;可以上网浏览网页&#xff0c;便可以使用本系统&#xff0c;没有时间和地点的限制&#xff0c;使得就医预约&#xff0c;…

枚举类(enum)

定义&#xff1a;在某些情况下&#xff0c;一个类的实例对象是有限且固定的&#xff0c;可将该类称为“枚举类”。枚举类是JDK 1.5 之后提出来的。例如&#xff1a;四季只有春夏秋冬4个季节&#xff0c;性别只有男女2个&#xff0c;故四季类和性别类均可称为“枚举类”。 在自…

python(8.5)--列表习题

目录 一、求输出结果题 二、计算列表元素个数 三、查找是否存在某元素 四、删除某元素 五、如何在列表中插入元素 六、如何从列表中删除重复的元素 七、 如何将列表中的元素按照从小到大的顺序排序 八、从列表中删除重复的元素 九、大到小的顺序排序 一、求输出结…

【源码解析】Ribbon和Feign实现不同服务不同的配置

Ribbon服务实现不同服务&#xff0c;不同配置是通过RibbonClient和RibbonClients两个注解来实现的。RibbonClient注册的某个Client配置类。RibbonClients注册的全局默认配置类。 Feign实现不同服务&#xff0c;不同配置&#xff0c;是根据FeignClient来获取自定义的配置。 示…

【大数据】Apache Spark 3.3.0 正式发布,新特性详解

简介 Apache Spark 3.3.0 从2021年07月03日正式开发&#xff0c;历时近一年&#xff0c;终于在2022年06月16日正式发布&#xff0c;在 Databricks Runtime 11.0 也同步发布。这个版本一共解决了 1600 个 ISSUE&#xff0c;感谢 Apache Spark 社区为 Spark 3.3 版本做出的宝贵贡…

Redis学习【8】之Redis RDB持久化

文章目录Redis 持久化1 持久化基本原理2 RDB(Redis DataBase) 持久化2.1 持久化的执行2.2 手动 save 命令2.3 手动 bgsave 命令2.4 自动条件触发2.5 查看持久化时间3 RDB 优化配置3.1 save3.2 stop-write-on-bgsave-error3.3 rdbcompression3.4 rdbchecksum3.5 sanitize-dump-p…

代码随想录算法训练营第六十三天| 503.下一个更大元素II、42. 接雨水

Leetcode - 503这题其实和下一个更大元素那题一样&#xff0c;只是说可以找自己前面的元素&#xff0c;那我索性就把遍历范围从本序列延长到两个相同序列。这样某个元素寻找下一个更大元素到本序列末尾后还可以继续往下&#xff0c;也就是从序列头开始找。这里依旧是可以用单调…

初识CSS,美化HTML

CSS称为&#xff1a;层叠样式表&#xff08;Cascading style sheets&#xff09;美化HTML即给页面种的HTML标签设置样式CSS语法规则css要写在head标签的里边&#xff0c;title标签的下面&#xff0c;用style标签框住<head> <title>...</title> <style>…