一、引言

最近看到一篇用js代码实现表白的文章,深有感触。

然后发现自己也可以用java代码实现,然后就开始写代码了,发现还挺有意思的,话不多说开搞

实现思路:

  • 使用HttpClient远程获取彩虹屁生成器网站中的内容 网站:https://chp.shadiao.app/

  • java Mail 实现发送邮件

  • SpringBoot 整合Scheduled 实现定时发送邮件

二、搭建项目

项目环境在SpringBoot框架基础上,加入邮件发送mail、RPC远程调用httpclient、Scheduled 的一个Maven项目,依赖如下:

  <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>2.3.2.RELEASE</version>    </parent>    <dependencies>                <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>    </dependencies>
    <!--打包插件-->    <build>        <plugins>            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>                <configuration>                    <fork>true</fork>                </configuration>            </plugin>        </plugins>    </build>

三、编写配置

在编写配置前需要,在浏览器登录自己的邮箱在账号安全中设置开启POP3/SMTP服务

开始开启POP3/SMTP服务需要输入验证码

复制授权码

勾选SMTP发信后保存到服务器,勾选这一项主要是可以看到自己发送了什么信息,不勾选此项。邮件消息发送成功后,邮箱内看不到自己已发送的信息

根据授权码编写配置

spring:  mail:    username: xxxxxx@qq.com  # 自己邮箱地址    password: xxxxxxx        # SMTP|POP3|IMAP协议授权码    host: smtp.qq.com        # 服务器地址。参考邮箱服务运营商提供的信息。    properties:      mail:        smtp:          auth: true          # 开启smtp协议验证    port: 587      
# 发给谁的邮箱she:  mail: xxxxxxx@163.com

四、编写SpringBoot启动类

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

五、自动生成发送内容

@Componentpublic 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(from);//发送者邮件邮箱            helper.setTo(sheMail);//收邮件者邮箱            helper.setSubject(subject);//发件主题            helper.setText(message);//发件内容            mailSender.send(helper.getMimeMessage());//发送邮件        } catch (MessagingException e) {            e.printStackTrace();        }
    }    /**远程获取要发送的信息*/    public static String getOneS(){        try {            //创建客户端对象            HttpClient client = HttpClients.createDefault();            /*创建地址 https://du.shadiao.app/api.php*/            HttpGet get = new HttpGet("https://chp.shadiao.app/api.php");            //发起请求,接收响应对象            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("网站获取句子失败");        }    }}

六、编写定时任务

@Componentpublic class MyScheduled {    @Autowired    private SendMessage sendMessage;
    /*定时执行任务方法 每天5点20执行该任务*/    @Scheduled(cron ="0 20 17 * * *")    public void dsrw(){        String message = sendMessage.getOneS();        sendMessage.sendMessage("来自清茶淡粥的消息!❤",message);    }}

七、打包运行

有条件的可以吧jar包放在运服务器上,没有条件的可以在本地win10系统上添加定时任务,每天定时执行jar包。

jar包放在服务器上需要放行端口:587 ,防火墙放行587端口

除了放行,还有放行 http 端口 和 https端口

然后在linux上后台启动jar包

nohup java -jar jar包 >test.log &

win10 定时运jar 包 在任务计划程序中创建任务

新建触发器

新建操作,在程序或脚本输入执行的jar命令,点击确定

然后可以看见,创建好的任务

八、总结

代码还有很大的提升,也有很多不足之处。

由于时间原因,可优化的地方还很多,比如:发送单纯的文字内容的邮件,不美观,可以实现html方式发送邮件,使发送邮件内容更加美观。

    public  void sendHtmlMessage(String subject,String message){        try {            MimeMessage mimeMessage = mailSender.createMimeMessage();            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage);            helper.setFrom(from);            helper.setTo(sheMail);            helper.setSubject(subject);            helper.setText(message,true);//true 使用html 方式发送            mailSender.send(helper.getMimeMessage());        } catch (MessagingException e) {            e.printStackTrace();        }

最后附上我写的源码供大家参考:

百度云链接:

https://pan.baidu.com/s/17z1Pjs1iP9CDd7IYuGohYA

提取码: 4rxp

SpringBoot实现定时发送邮件相关推荐

  1. Springboot实现定时发送邮件(QQ邮件为例)

    1.导入相关的maven依赖 <!--导入javax mail--><dependency><groupId>org.springframework.boot< ...

  2. java 延时发送邮件_基于SpringBoot实现定时发送邮件过程解析

    前提: 1.springboot项目 2.引入maven 依赖 org.springframework.boot spring-boot-starter-mail 以下代码中涉及到的maven依赖有日 ...

  3. SpringBoot实现定时发送邮件功能

    1:准备邮件配置环境.(我使用的是QQ邮箱) 登录QQ邮箱  --> 设置  -->  账户 -->如图操作.(需要开启这个服务,开启很简单,根据提示就可以了) 2:开始创建一个ma ...

  4. SpringBoot定时发送邮件

    详细参考上一篇文章 :SpringBoot邮件发送功能 更新:2021-2-2 17:13:38 定时邮件 SpringBoot 整合Scheduled 实现定时发送邮件 启动类 启动类上添加定时启动 ...

  5. java实现定时发送邮件

    前几天,需要做一个功能就是 客户使用我们公司的设备的时候 ,每天固定一个时间点 ,我们定时发送该设备的数据到客户邮箱,让客户了解自己设备的一个情况,由于代码不能上传,就把当时我开始搭建开发而写的一个d ...

  6. Java实现定时发送邮件的任务

    定时发送邮件 定时任务 使用Spring Task 导入依赖 创建任务类 Cron 表达式详解 邮件服务 定时发送邮件功能 定时任务 使用Spring Task 在 Springboot项目中可以通过 ...

  7. odoo定时发送邮件

    采购订单延迟或者存在部分到货的情况,定时发送邮件给相关人员 包含,采购订单明细,订单数量,已到货数量,未到货数量 <?xml version="1.0" encoding=& ...

  8. python定时发送邮件_Python3实现带附件的定时发送邮件功能

    本文实例为大家分享了Python3定时发送邮件功能的具体代码,供大家参考,具体内容如下 1. 导入模块 import os import datetime #定时发送,以及日期 import shut ...

  9. 定时运行python脚本并发送邮件_python实现定时发送邮件到指定邮箱

    本文实例为大家分享了python实现定时发送邮件到指定邮箱的具体代码,供大家参考,具体内容如下 整个链路:传感器采集端采集数据,边缘端上传数据库,从数据库拿到数据. 产品端有个自动出报告的需求,并且希 ...

最新文章

  1. Membership学习(二)membership入门
  2. Mysql-cobar集群安装部署手册
  3. c语言linux打印运行时间(耗时) gettimeofday()、timeval、<sys/time.h>
  4. H.264基础知识及视频码流解析
  5. Halcon中OCR的实现及关键函数解析
  6. Storm0.9.4安装 - OPEN 开发经验库
  7. 运算符重载的非成员函数形式
  8. 杜拉拉升职记(1和2)
  9. [APIO2009]抢掠计划 ($Tarjan$,最长路)
  10. 程序员热议996工作制度:我生来不是为了工作的,我还要有生活
  11. Ubuntu20.04、22.04安装nvidia显卡驱动
  12. css的定位属性——固定定位和粘性定位
  13. Matlab一张图上绘制两条曲线-2021-11-05
  14. Monty Hall Problem (三门问题)
  15. 关于李沐深度学习softmax学习中代码出错的问题及解决方法
  16. win10 outlook2016 如何删除IMAP文件夹 (脑残党操作)
  17. Lambda表达式表达式树
  18. 软件测试就业前景怎么样?
  19. 为什么你的电脑搜索不到你手机开启的热点
  20. CatBoost 模型中标称型特征转换成数字型特征

热门文章

  1. ESP8266 Modbus通信
  2. CentOS7中:通过 lrzsz 命令来上传和下载文件
  3. 2021年茶艺师(中级)考试报名及茶艺师(中级)复审考试
  4. 一台交换机 双服务器 无盘,奇东锐腾硬件-企业、KTV、ERP、网吧服务器,光纤、万兆交换机…...
  5. Ajax总结【博学谷学习记录】超强总结,用心分享
  6. html 填满父容器,CSS让子元素div的高度填满父容器的剩余空间的方法
  7. F5:让红包安全的飞
  8. 国产数据库发展简史与趋势
  9. 走进江苏作家诗人胭脂茉莉|世界读书日
  10. Windows 中,显示 USB图标但是点击无效的解决办法