SpringBoot之邮件发送与异步控制

一、邮件发送

  • 使用spring的邮件发送功能 首先需要导入mail启动器
   <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
  • 打开邮箱设置 获取授权码

在QQ邮箱中的设置->账户->开启pop3和smtp服务

在这里插入图片描述

此时会得到一个字符串 用作配置的password

  • 配置mailproperties文件
spring.mail.username=1471305491@qq.com
spring.mail.password=zlcjmkidrwkojbji
spring.mail.host=smtp.qq.com
# 如果是qq 开启加密验证
spring.mail.properties.mail.smtp.ssl.enable=true
  • 引入JavaMailSenderImpl

这个类是springboot帮我们写好的 我们只需要引入它 并自动装配

   @Autowired
    JavaMailSenderImpl javaMailSender;
  • 编写邮件类
    • 使用javaMailSender的send方法,通过原码我们得到它需要一个SimpleMailMessage()对象于是我们就创建这个对象

在这里插入图片描述

       SimpleMailMessage message = new SimpleMailMessage();
        javaMailSender.send(message);
    • 使用message对象 编写邮件

      通过message.set 我们发现了一系列方法
      !](https://img-blog.csdnimg.cn/96915085d5bb4ae091d323de21fc9f94.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FtYXppbmc2Ng==,size_16,color_FFFFFF,t_70)

      	//主题
        message.setSubject("你好~");
        //内容
        message.setText("xiexieni");
        //接受方
        message.setTo("1471305491@qq.com");
        //发送方
        message.setFrom("1471305491@qq.com");

这样子 一个邮件类就写完了 最后运行就可以发送到指定邮箱了

在这里插入图片描述

package com.llf;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;

@SpringBootTest
class SpringbootTaskEmailApplicationTests {

    @Autowired
    JavaMailSenderImpl javaMailSender;
    @Test
    void contextLoads() {
        SimpleMailMessage message = new SimpleMailMessage();
      //主题
        message.setSubject("你好~");
        //内容
        message.setText("xiexieni");
        //接受方
        message.setTo("1471305491@qq.com");
        //发送方
        message.setFrom("1471305491@qq.com");
        javaMailSender.send(message);
    }

}

二、异步控制

在生活中有许多异步控制的例子,拿充话费来说,通常都是充值成功以后会立马提醒你,你已经充值成功了。但是实际花费到账的时间往往会滞后几分钟,这里就用到了多线程、异步控制的知识。

首先 如果我们不采用异步控制 来访问一个页面

 //Service
public void hello(){
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("你被执行了");
    }


// Controller
@Controller
public class AsyncController {
    @Autowired
    AsyncService asyncService;
    @GetMapping("/")
    @ResponseBody
    public String Asnyc(){
        asyncService.hello();
        return  "ok";
    }
}

按照正常运行 我们会在页面上卡3s 然后进入ok页面 紧接着 控制台输出

在这里插入图片描述

如果网站这样,那么一定会很影响用户的体验,有没有方法可以使数据和提示分开执行 ,用户可以提前进入 但是数据滞后呢?

这个时候异步控制就出来了

配置异步控制很简单 首先在需要执行的方法上添加@Async注解 然后在启动类上添加@EnableAsync注解即可

    //告诉spring这是一个异步任务 它会帮我们开启线程池 	
@Async
    public void hello(){
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("你被执行了");
    }


@EnableAsync
@SpringBootApplication
public class SpringbootTaskEmailApplication {

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

}

继续访问
在这里插入图片描述

这样就实现了异步任务

三、定时任务

定时任务和异步控制一样 只需要在方法上和启动类上添加注解即可

在这之前我们需要了解什么使cron表达式

在这里插入图片描述

通俗来说 就是设定一个时间 告诉程序 到这个时间后 就完成指定的方法体

cron 一共有六个参数 从左往右依次是 秒 分 时 日 月 周几 知道这个后我们就可以设置时间来完成事情

@Service
public class TaskService {
    /*
        cron表达式  一共六个参数
        依次是 秒 分 时 日 月 周几
     */
    @Scheduled(cron = "50 * 18 * * ?") // 这句话的意思就是 每天的18点 的每一分钟的第50s就输出下面这句话
    public void hello(){
        System.out.println("你被执行了plus");
    }

}


@EnableScheduling
@SpringBootApplication
public class SpringbootTaskEmailApplication {

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

}


然后测试运行

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值