SpringBoot如何发送邮件,以及邮件的异步和定时任务

1.创建SpringBoot项目

引入依赖:

<!--新增对邮件支持,使用javax.mail-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
</dependency>
<!--邮件-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

2.配置

spring:
  mail:
    username: [email protected]  
    password: xqqtyadfkcptddhd
    default-encoding: UTF-8
    host: smtp.qq.com
    properties:
      mail:
        smtp:
          auth: true
          port: 587
          starttls:
            enable: true
            required: true

说明:

image-20211018213930232

首先我了解了一下SMTP协议:

​ SMTP是一种提供可靠且有效的电子邮件传输的协议。SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知。SMTP独立于特定的传输子系统,且只需要可靠有序的数据流信道支持,SMTP的重要特性之一是其能跨越网络传输邮件,即“SMTP邮件中继”。使用SMTP,可实现相同网络处理进程之间的邮件传输,也可通过中继器或网关实现某处理进程与其他网络之间的邮件传输

SMTP服务器是遵循SMTP协议的发送邮件服务器,用来发送或中转用户发出的电子邮件

它的工作流程如下:

  1. 建立连接:

    smtp用户与smtp服务器25号端口建立连接(该端口对应smtp服务)

  2. 传送邮件

    SMTP客户将邮件的源地址、目的地址和邮件的具体内容传递给SMTP服务器,SMTP服务器进行相应的响应并接收邮件。

  3. 释放连接

STARTTLS

​ 是一种明文通信协议的扩展,能够让明文的通信连线直接成为加密连线(使用SSLTLS加密),而不需要使用另一个特别的端口来进行加密通信,属于机会性加密

如何获取授权码?

image-20211018215249438

首页点击设置

image-20211018215340792

点击账户,往下滑

image-20211018215541297

3.写代码发邮件

  1. 发送简单邮件

    image-20211019094624042

image-20211019094800960

  1. 发送富文本邮件

    image-20211019095956179

image-20211019100013392

发送含图片的邮件:

//创建邮件
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        //需要使用MimeMessageHelper类对mimeMessage操作,并开启文件传输
        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage,true);
        //发送方
        mimeMessageHelper.setFrom("[email protected]");
        //接收方
        mimeMessageHelper.setTo("[email protected]");
        //主题
        mimeMessageHelper.setSubject("富文本邮件图片测试");
        //内容,这里是发送html的内容,需要开启为true,添加图片
        mimeMessageHelper.setText("<font color='red'>Hello World!</font><img src='cid:test'>",true);
        //图片路径
        File file = new File("C:\\Users\\29443\\Desktop\\qq.jpg");
        //添加内嵌图片
        mimeMessageHelper.addInline("test",file);
        //发送文件
        javaMailSender.send(mimeMessage);

image-20211019101944876

image-20211019102012288

发送带附件的,简单了只需要在上面的代码中加一句代码

image-20211019102808752

image-20211019102907218

4.邮件的异步、定时任务

我们知道,发送一封邮件是需要一定时间的,大概需要等5秒?10秒?

在正真的业务开发中,用户发了一个请求,需要发送邮件,我们不肯

可能说等到邮件发送成功才响应给用户,你愿意点击一个按钮10秒才给你响应吗?

添加异步,我们就能够立即响应,而邮件的发送就让它执行去吧

image-20211019104442127

如何使用异步

  1. 入口类加上@EnableAsync
  2. 需要异步的方法上添加@Async(我们这里是发邮件,就加在发邮件的方法上)

就ok了

邮件定时任务

@EnableScheduling    //启动类加
@Scheduled(cron = " 0 0 20 * * ?")   //方法上加

在需要的方法上加上就行了,这里是每天晚上8点执行

这里我们需要了解 corn 表达式,我也不会https://www.bejson.com/othertools/cron/,这是模拟corn的,可以计算最近10次发生的时间,也可以生成corn,非常好用建议收藏

首先它是由 6或者7个域组成,多一个是年份,因为不常用年来设置定时任务,所以可以不写年

顺序为:

秒----分-----时-----日-----月-----星期-----年

0:意思时,舍弃你这个域,我判断是否执行时不会看你(日、月、星期、年都不能设置0

:代表任意,比如 * 10 * * * ?,(不写年也代表任意年)就是任意的年的任意月份的某天不管星期几的随意小时的第10分钟的任意一秒都会执行这个任务,?号与的区别就是,?只能在星期、年上使用

下面是比较官方的解释:https://www.bejson.com/othertools/cronvalidate/

image-20211019112323306

image-20211019112350190

image-20211019112421395

Supongo que te gusta

Origin blog.csdn.net/qq_42682745/article/details/120842996
Recomendado
Clasificación