详细实现流程
- 导入SpringBoot-email依赖
- 编写yml配置文件,配置邮箱信息
- 创建RestTemplate模板,用来跨域调用接口
- 调用一言接口,获取一句话
- 创建定时任务(cron表达式)。在主程序入口处加上@EnableScheduling,让定时任务生效,每隔十分钟调用一次一言接口,将获取的话按照程序设定发给指定的人
首先maven导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
在application.yml里编写配置
mail:
host: smtp.qq.com # 邮箱主机
username: 914823194@qq.com # 设置用户名
password: fasshzligaibbdce # smtp 授权码
properties.mail.smtp.port: 465 # 端口号
from: 914823194@qq.com # 发送邮件的账号
properties.mail.smtp.starttls.enable: true
properties.mail.smtp.starttls.required: true
properties.mail.smtp.ssl.enable: true
default-encoding: utf-8 # 默认编码集
定义RestTemplate模板
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
调用一言接口,获取一句话
@Component
public class HitokotoUtil {
@Autowired
private RestTemplate restTemplate;
/**
* 一言的URL地址
*/
private static final String URL_HITOKOTO = "https://v1.hitokoto.cn/?c=i";
/**
* 调用一言接口获取一句话
* @return
*/
public String getResult() {
Hitokoto hitokoto = restTemplate.getForObject(URL_HITOKOTO, Hitokoto.class);
String str = hitokoto.getHitokoto();
String from = hitokoto.getFrom();
String from_who = hitokoto.getFrom_who();
if (from != null) {
str += " 来源 " + from;
}
if (from_who != null) {
str += " 来自于 " + from_who;
}
return str;
}
}
发送邮件详细代码
@Component
public class SendMailUtil {
@Value("${spring.mail.from}")
private String from;
@Autowired
private JavaMailSender mailSender;
/**
* 发送简单文本邮件
* @param to
* @param subject
* @param text
*/
public void sendSimpleMail(String to, String subject, String text) {
//创建SimpleMailMessage对象
SimpleMailMessage message = new SimpleMailMessage();
//邮件发送人
message.setFrom(from);
//邮件接收人
message.setTo(to);
//邮件主题
message.setSubject(subject);
//邮件内容 需要长一点 不然容易被识别为垃圾邮件
message.setText(text);
//发送邮件
mailSender.send(message);
}
}
定时任务
@Component
public class TaskDemo {
@Autowired
private HitokotoUtil hitokotoUtil;
@Autowired
private SendMailUtil sendMailUtil;
// cron 表达式 指定时间周期 每十分钟发送一次
@Scheduled(cron = "0 0/10 * * * ? ")
public void info() {
String subject = "给宝贝的一封邮件" + new Date();
String to = "xxxxxxxxxx@qq.com";
String text = hitokotoUtil.getResult();
System.out.println(text + " 发送时间:" + new Date());
sendMailUtil.sendSimpleMail(to, subject, text);
}
}
最后需要在启动类中加上注解@EnableScheduling,让定时任务生效
@SpringBootApplication
@MapperScan(value = "com.qianfeng.mapper")
@EnableScheduling // @Scheduled 生效
public class Ch4BootSsmApplication {
public static void main(String[] args) {
SpringApplication.run(Ch4BootSsmApplication.class, args);
}
}