SprinBoot~实现使用异步任务优化邮件发送

实现邮件发送

  1. 导入mail依赖
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
  1. 配置application, qq授权码必须是发送者qq的授权码,获取方式很简单, 百度有详细步骤
spring.mail.username=321359027@qq.com
# password是qq授权码
spring.mail.password=XXXXXXX
spring.mail.host=smtp.qq.com
# qq需要配置ssl
spring.mail.properties.mail.smtp.ssl.enable=true
  1. 编写发送代码
    在这里插入图片描述
  • 由于SprigBoot的自动配置以及帮我们注册了JavaMailSenderImpl的Bean, 所以我们可以直接使用它
@Service
public class MailService {

    //注入senderImpl
    @Autowired
    private JavaMailSenderImpl sender;


    public void sendSimpleMessage() {

        //实例化一个简单邮件
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();

        //设置邮件信息
        simpleMailMessage.setFrom("XXXXXX@qq.com");  //发送者QQ
        simpleMailMessage.setTo("XXXXXX@qq.com");    //接收着QQ
        simpleMailMessage.setSubject("紧急通知");    //邮件主题
        simpleMailMessage.setText("开个玩笑,哈哈哈");   //邮件内容
        //发送
        sender.send(simpleMailMessage);
        System.out.println("[DEBUG]" + simpleMailMessage.getSubject() + ",发送成功");
    }


    public void sendMimeMessage() throws MessagingException {

        //实例一个复杂邮件
        MimeMessage mimeMessage = sender.createMimeMessage();
        //true表示如果需要,以多部分模式(支持替代文本,内联元素和附件)
        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);

        //信息构建
        mimeMessageHelper.setSubject("爽娃娃");
        mimeMessageHelper.setText("<h style='color:red'></h>", true);  //true表示是否以html解析

        //发送附件, 第一个参数表示附件名, 第二个参数为附件
        mimeMessageHelper.addAttachment("小哥哥好坏.png",
                new File("C:\\Users\\Huawei\\Desktop\\QQ截图20201118160318.png"));

        mimeMessageHelper.setFrom("XXXXXX@qq.com");
        mimeMessageHelper.setTo("XXXXXX@qq.com");

        sender.send(mimeMessage);
        System.out.println("[DEBUG]" + mimeMessage.getSubject() + ",发送成功");
    }

}
  1. 编写controller访问
@RestController
public class MailController {

    @Autowired
    private MailService service;

    @RequestMapping("/send")
    public String send() {
        System.out.println("开始发送时间:" + new Date().toString());
        service.sendSimpleMessage();
        System.out.println("返回响应时间:" + new Date().toString());
        return "Send OK";
    }

    @RequestMapping("/send2")
    public String send2() {
        System.out.println("开始发送时间:" + new Date().toString());
        try {
            service.sendMimeMessage();
        } catch (MessagingException e) {
            e.printStackTrace();
        }
        System.out.println("返回响应时间:" + new Date().toString());
        return "Send OK";
    }

}
  1. 测试, 运行项目, 访问路径controller
    在这里插入图片描述
    在这里插入图片描述
  • 邮件发送成功, 但是我们通过DEBUG的时间发现耗时太长
    在这里插入图片描述
  • 我们使用异步任务对其进行优化

实现使用异步任务优化邮件发送

  1. 开启异步任务 @EnableAsync //开启异步任务
@SpringBootApplication
@EnableAsync //开启异步任务
public class DemoApplication {

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

}
  1. 在发送邮件的方法上添加注解 @Async
    @Async
    public void sendSimpleMessage() {

        //实例化一个简单邮件
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();

        //设置邮件信息
        simpleMailMessage.setFrom("321359027@qq.com");
        simpleMailMessage.setTo("1604053140@qq.com");
        simpleMailMessage.setSubject("紧急通知");
        simpleMailMessage.setText("开个玩笑,哈哈哈");
        //发送
        sender.send(simpleMailMessage);
        System.out.println("[DEBUG]" + simpleMailMessage.getSubject() + ",发送成功");
    }
  1. 再次测试访问
    在这里插入图片描述
    在这里插入图片描述
  • 这次邮件正常发送, 并且提高了用户体验
  • 在我们的工作中,常常会用到异步处理任务,比如我们在网站上发送邮件,后台会去发送邮件,此时前台会造成响应不动,直到邮件发送完毕,响应才会成功,所以我们一般会采用多线程的方式去处理这些任务。还有一些定时任务,比如需要在每天凌晨的时候,分析一次前一天的日志信息。还有就是邮件的发送,SpringBoot都给我们提供了对应的支持,我们上手使用十分的简单,只需要开启一些注解支持,配置一些配置文件即可!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值