功能介绍:调用 “ 彩虹屁 ” API,定时向发送邮箱发送email,实现自动化😂

知识准备:

​ spring boot框架的mail邮件,cron表达式,远程创建客户端对象发送请求、获取信息,JSON处理......

​ 实现该功能的步骤如下:

1. maven依赖

​ 新创建一个空的maven项目,pom文件导入以下依赖和插件:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.6.6</version>
    <relativePath/>
</parent>
<dependencies>
    <!--email支持-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
    </dependency>
    <!-- httpclient 依赖 -->
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.12</version>
    </dependency>
    <!--处理JSON-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.9</version>
    </dependency>
</dependencies>
<!--maven打包插件-->
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <fork>true</fork>
            </configuration>
        </plugin>
    </plugins>
</build>

2. 配置文件

​ 在resource目录下新建一个application.yml文件,配置信息如下:

spring:
  mail:
    username: xxx你的邮箱xxx.com
    password: xxx16位SMTP|POP3协议授权码xxx   #下文展示如何获取
    host: smtp.163.com    #我用的网易邮箱,QQ邮箱为smtp.qq.com
    properties:
      mail:
        smtp:
          auth: true
    port: 465    #网易端口为465,QQ端口为587
    protocol: smtps

she:
  mail: xxx收件人邮箱xxx.com   #如果多个收件人,在后面添加逗号,再继续添加

​ 如何获得授权码,参考以下文章:

​ 网易邮箱获取:请点击→网易获取授权码方法

​ QQ邮箱获取:请点击→QQ获取授权码方法

3. SpringBoot启动类

@EnableScheduling
@SpringBootApplication
public class BiaoBaiApp {
    public static void main(String[] args) {
        SpringApplication.run(BiaoBaiApp.class,args);
    }
}

4. 主要功能类

​ 自动发送类:

@Component
public class SendMessage {
    @Autowired
    private JavaMailSender mailSender;
    @Value("${spring.mail.username}")
    private String from;
    @Value("${she.mail}")
    private String[] sheMail;
    public void sendMessage(String subject,String message) {
        try {
            MimeMessage mimeMessage = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage);
            helper.setFrom(new InternetAddress(from, "这里填写你的用户名或昵称"));//发送者邮箱
            helper.setTo(sheMail);//收邮件者邮箱
            helper.setSubject(subject);//发件主题
            helper.setText(message,true);//发件内容
            mailSender.send(helper.getMimeMessage());//发送邮件
        } catch (MessagingException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }
    /**远程获取要发送的信息*/
    public static String getOneS(){
        try {
            //创建客户端对象
            HttpClient client = HttpClients.createDefault();
           //接口地址
            HttpGet get = new HttpGet("https://api.shadiao.app/chp");
            //发起请求,接收响应对象
            HttpResponse response = client.execute(get);
            //获取响应体,响应数据是一种基于HTTP协议标准字符串的对象
            //响应体和响应头,都是封装HTTP协议数据。直接使用可能出现乱码或解析错误
            HttpEntity entity = response.getEntity();
            //通过HTTP实体工具类,转换响应体数据
            String responseString = EntityUtils.toString(entity, "utf-8");

            return responseString;

        } catch (IOException e) {
            throw  new RuntimeException("网站获取句子失败");
        }
    }
}

​ 定时任务类:

@Component
public class MyScheduled {
    @Autowired
    private SendMessage sendMessage;
    /*定时执行任务方法 每天5点20执行该任务*/
    @Scheduled(cron ="0 20 5 * * ?")
    public void dsrw() {
        String message = sendMessage.getOneS();
        Map<?, ?> map = JSON.parseObject(message, Map.class);
        String text = (String) ((Map<?, ?>) map.get("data")).get("text");
        sendMessage.sendMessage("(这里是邮件题目,自定义)", text);
    }
}

​ cron表达式语法:

​ {秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)}

​ 经典案例:

​ “30 * * * * ?” 每半分钟触发任务
​ “30 10 * * * ?” 每小时的10分30秒触发任务
​ “30 10 1 * * ?” 每天1点10分30秒触发任务
​ “30 10 1 20 * ?” 每月20号1点10分30秒触发任务
​ “30 10 1 20 10 ? *” 每年10月20号1点10分30秒触发任务

5. 打包部署

  1. Maven打包

    生成的jar包:

  2. 部署到linux服务器(2、3选其一)

    第一步,上传该jar包

    第二步,java后台运行jar包,命令:

    nohup java -jar 你的jar包名字.jar >temp.txt 2>&1 &
    
  3. 部署到windows

    第一步:依次点击找到 “我的电脑”→鼠标右键 “管理”→“定时任务”→“定时任务库”→“创建”

    • 创建任务

    • 新建触发器

    • 新建操作

      点击确定后,变创建好新建的任务了

6. 结果

​ 感兴趣的话,就搞起来!😂