基于狂神说Springboot中讲到的邮箱发送案例(异步任务和定时任务)的总结笔记

本文介绍了如何在SpringBoot应用中实现异步邮件发送,避免阻塞用户界面,并详细讲解了启用异步任务和定时任务的配置,以及如何创建和测试复杂的邮件发送功能。还演示了如何设置定时任务,如使用cron表达式进行周期性执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

任务

异步任务~

定时任务~

异步任务

1.异步任务的作用是当用户在网页使用的过程中,如用户需要发送一封邮件。

2.在不使用到异步任务的时候页面会在邮箱发送的过程中一直处于白屏状态直到邮件发完,这样子很影响用户的体验感。

3.所以在这种情况下就需要用到异步任务让他在不影响用户使用的情况下去完成某件事。

@EnableAsync //启动异步任务的注解
@SpringBootApplication
public class Springboot09TestApplication {

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

}

一般异步任务设置在业务层

@Service
public class SendMailService {

    @Autowired
    JavaMailSenderImpl mailSender;

    @Async // 这个就是一个异步任务的注解
    public void sendMail(String subject, String text, String to, String from) {
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setSubject(subject);
        simpleMailMessage.setText(text);

        simpleMailMessage.setTo(to);
        simpleMailMessage.setFrom(from);
        mailSender.send(simpleMailMessage);
    }
}

邮件发送~(基于springBoot环境下)

这个邮箱发送案例只能是固定的邮件发送者,而邮件的接受者是可以变动的!

 # 发送邮箱需要用到的依赖
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
 </dependency>

# 在application.properties中配置
spring.mail.username=2336164407@qq.com

# 在邮箱设置里产生的一个明文密码
spring.mail.password=XXXXXXXXXXX 
spring.mail.host=smtp.qq.com

# 使用qq邮箱需要的额外添加
# 开启加密验证
spring.mail.properties..mail.smtp.ssl.enable=true

明文密码的获取方式
在这里插入图片描述
在账号这个界面里面下滑找到下图这个位置,去开启!!!
在这里插入图片描述
1.如果你是没有开启状态的话,当你点击开启时会出现一个验证需要你填。

2.你的QQ有绑定qq安全中心的话就会有选择给你选择使用手机令牌。

3.如果是没有绑定过的话就会直接显示一个需要用手机短信去验证的。

(建议使用手机令牌去验证)
在这里插入图片描述
在这里插入图片描述

测试

// 获取到类
@Autowired
 JavaMailSenderImpl mailSender;

发送一个简单的邮件

        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setSubject("你好呀!~~~"); // 标题
        simpleMailMessage.setText("me123"); // 文本内容

        simpleMailMessage.setTo("2336164407@qq.com"); // 接受者的邮箱
        simpleMailMessage.setFrom("2336164407@qq.com"); // 发送者的邮箱
        mailSender.send(simpleMailMessage);

发送一个复杂的邮件

         // 一个复杂的邮件
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        // 组装
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true); /// true 表示支持多文件 false 表示不支持多文件

        // 正文
        helper.setSubject("me123"); // 标题
        helper.setText("<p style='color: red'>me123</p>",true); // 内容 true表示可以识别html false表示不能识别

        // 附件
        helper.addAttachment("文件名",new File("文件路径"));
        helper.addAttachment("文件名",new File("文件路径"));

        helper.setTo("2336164407@qq.com"); // 接受者的邮箱
        helper.setFrom("2336164407@qq.com"); // 发送者的邮箱

        mailSender.send(mimeMessage);

把复杂邮件封装起来

// 只有在springBoot环境中这个套封装发送邮件类才有效果
public void sendMail(boolean multipart,	// 是否支持多文件
                     boolean html, 		// 是否解析内容中的html标签
                     String subject, 	// 邮箱标签
                     String text, 		// 邮箱内容
                     Map<String,String> attachments,	// 附件
                     String to, 		// 接受者的邮箱
                     String from		// 发送者的邮箱
                    ) throws MessagingException {
        // 一个复杂的邮件
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        // 组装
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,multipart);
        // 正文
        helper.setSubject(subject);
        helper.setText(text,html);
        // 附件
        for (String key : attachments.keySet()) {
            helper.addAttachment(key,new File(attachments.get(key)));
        }
        helper.setTo(to);
        helper.setFrom(from);
        mailSender.send(mimeMessage);
    }

定时任务

@EnableScheduling //需要在启动类上面配置一个注释
@EnableScheduling // 这是一个启动定时任务的注解
@SpringBootApplication
public class Springboot09Text1Application {

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

}

测试

 cron = "秒 分 时 日 月 (0-7)星期"
@Scheduled(cron = "0 27 15 * * ?")
    public void hello() {
        System.out.println("hello,执行了");
    }

原视频链接:https://www.bilibili.com/video/BV1PE411i7CV?p=51

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是鱼染哟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值