springboot 实现定时发送邮件任务

功能实现需要两个知识点:1 定时任务 2 邮件服务
先说SringBoot定时任务:
SpringBoot自带定时任务处理,开箱即用 方便快捷以及灵活配置等特点。实现需要两个注解,@EnableScheduling //表示开启定时任务注解支持
@Scheduled //自带cron表达式,方便用户自定义。
示例如下:

/**
 * @ClassName ApplicationTest
 * @Description TODO
 * @Author 86150
 * @Date 2021/1/20 21:08
 * @Version 1.0
 **/
@SpringBootApplication
@EnableAsync//开启异步支持
@EnableScheduling//开启定时任务执行
public class ApplicationTest {
    public static void main(String[] args) {
        SpringApplication.run(ApplicationTest.class);
    }
}

cron表达式 用户可自行百度,

 //秒 分 时 日 月 周
 	//每天每时每分 每两秒执行一次
    @Scheduled(cron = "0/2 * * * * ?")
    public void test2(){
        System.out.println("每两秒执行"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
    }

邮件服务:
1 在使用邮件服务之间务必 要开通POP3/SMTP 服务,否则你的服务无法与之通信。

2 需要导入指定jar

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

3 配置邮件:

# 配置使用的哪个邮件服务商
spring.mail.host=smtp.163.com
# 发送人的邮箱
spring.mail.username=1506405245@163.com
# 授权码 表示可以通信 (服务能让你在本地客户端上收发邮件)
spring.mail.password=FFLDJIDFDssgMIEDLZ
#####################FFLDJIDFDMIEDLZ 
个人不建议使用QQ邮箱,作者自己测试的时候,QQ的授权码老是失效,动不动就报错,目前也没有找到QQ授权码永久开启的方法。

3 邮件可以分为普通的邮件和复杂一些的邮件,不过原理都是相通的。
在这里我们主要使用一个类JavaMailSenderImpl
他实现了JavaMailSender接口,而JavaMailSender接口自己又继承了MailSender接口。MailSender中只有两个发送核心方法,如图所示:

//
package org.springframework.mail;

public interface MailSender {
    void send(SimpleMailMessage var1) throws MailException;

    void send(SimpleMailMessage... var1) throws MailException;
}

3.1 普通邮件服务
3.1.1 创建邮件主题
3.1.2 创建邮件文本
3.1.3 指定发送人
3.1.4 指定接收人
3.1.5 调用发送方法

@Autowired
    private JavaMailSender javaMailSender;

    public void sendMail() {
        long startTime = System.currentTimeMillis();
        //初始化邮件对象
        SimpleMailMessage mail = new SimpleMailMessage();
        //主题
        mail.setSubject("测试主题");
        //文本
        mail.setText("Hello World");
        //发送人
        mail.setFrom("15064023564@163.com");
        //接受人
        mail.setTo("229023541@qq.com");
        javaMailSender.send(mail);
        long endTime = System.currentTimeMillis();
        long mill = (endTime - startTime) / 1000;
        System.out.println("发送邮件耗时:" + mill + ":秒");
    }

3.2 复杂邮件服务,无非是添加了附件 如图片、pdf、txt等

public void sendMessage() {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        try {
        	//组装复杂邮件
            MimeMessageHelper mimeHelper = new MimeMessageHelper(mimeMessage, true);
            mimeHelper.setTo("2290243831@qq.com");
            mimeHelper.setFrom("15064025083@163.com");
            //标题
            mimeHelper.setSubject("开发者测试");
            //正文
            mimeHelper.setText("抗击疫情 人人有责");
            //附件
            File file = new File("D:\\devTools\\apache-maven-3.6.1-bin.zip");
            mimeHelper.addAttachment("清明上河图", file);
            //图片
            mimeHelper.addAttachment("test.png", new File("D:\\wp\\思维导图\\servlet原理.png"));
        } catch (MessagingException e) {
            e.printStackTrace();
        }
        javaMailSender.send(mimeMessage);
    }

到了这儿,实现定时任务邮件发送其实就简单了很多,无非就是将两个服务整合在一块。
1 启动类添加@EnableScheduling//开启定时任务执行
2 编写邮件发送方法,方法上面添加定时任务注解
// 秒 分 时 日 月 周
@Scheduled(cron = “0/5 * * * * ?”)

3 最后附上测试代码

 // 秒 分 时 日 月 周
    @Scheduled(cron = "0/5 * * * * ?")
    public void send() {
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setFrom("150625351@163.com");
        simpleMailMessage.setTo("31852651@qq.com");
        simpleMailMessage.setSubject("开发者测试");
        simpleMailMessage.setText("抗击疫情 人人有责 我在:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
        System.out.println("开始发送 邮件:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
        javaMailSender.send(simpleMailMessage);
        System.out.println("邮件发送结束:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
    }
2021-01-30 14:53:49.756  INFO 16332 --- [           main] com.ApplicationTest               : Started ApplicationTest in 1.967 seconds (JVM running for 2.863)
开始发送 邮件:2021-01-30 14:53:50
邮件发送结束:2021-01-30 14:54:08
开始发送 邮件:2021-01-30 14:54:10
邮件发送结束:2021-01-30 14:54:28
开始发送 邮件:2021-01-30 14:54:30
Disconnected from the target VM, address: '127.0.0.1:11038', transport: 'socket'
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值