需求来源
某一天Hutool群中有美女(也可能是抠脚大汉)抱怨领导,说让ta每天写工作日报,说明今天做了哪些工作,每周还有周报。美女遇到问题嘛,本着能聊则聊,能帮则帮的原则,于是使用Hutool写了一个Demo。
使用到的模块和工具类
- cron模块,用于定时发送邮件
- extra模块,MailUtil,用于发送邮件
- poi模块,WordWriter,用于生成日报的word
Demo介绍
Demo项目可以访问码云地址获取:https://gitee.com/loolly_admin/daily-work
项目结构
src/main/java
cn/hutool/example/dailyWork/
DailyWorkGenerator.java ---- 日报生成器,用于生成Word文档
MailSendTask.java ---- 邮件发送任务,用于发送邮件
DailyWorkMain.java ---- 定时任务主程序,用于启动定时任务
src/main/resources
config/
cron.setting ---- 定时任务配置文件
mail.setting ---- 邮箱配置文件
代码实现
- 生成日报Word
/** 标题字体 */
private static final Font TITLE_FONT = new Font("黑体", Font.PLAIN, 22);
/** 正文字体 */
private static final Font MAIN_FONT = new Font("宋体", Font.PLAIN, 14);
/**
* 生成日报
*
* @return 日报word文件
*/
public static File generate() {
// 1、准备文件
File wordFile = FileUtil.file(StrUtil.format("每日工作汇报_{}.docx", DateUtil.today()));
if(FileUtil.exist(wordFile)) {
// 如果文件存在,删除之(可能上次发送遗留)
wordFile.delete();
}
// 生成并写出word
Word07Writer writer = new Word07Writer(wordFile);
writer.addText(ParagraphAlignment.CENTER, TITLE_FONT, "工作日报");
writer.addText(MAIN_FONT, "");
writer.addText(MAIN_FONT, "尊敬的领导:");
writer.addText(MAIN_FONT, " 今天我在Hutool群里摸鱼,什么工作也没做。");
writer.close();
return wordFile;
}
- 发送邮件
在mail.setting中配置发件箱信息
# 发件人(必须正确,否则发送失败)
from = Hutool<hutool@yeah.net>
# 用户名(注意:如果使用foxmail邮箱,此处user为qq号)
user = hutool
# 密码
pass = XXXX
#使用 STARTTLS安全连接
startttlsEnable = true
#使用 SSL安全连接
sslEnable = true
// 今天的日期,格式类似:2019-06-20
String today = DateUtil.today();
// 生成汇报Word
File dailyWorkDoc = DailyWorkGenerator.generate();
// 发送邮件
MailUtil.sendHtml("hutool@foxmail.com", StrUtil.format("{} 工作日报", today), "请见附件。", dailyWorkDoc);
StaticLog.debug("{} 工作日报已发送给领导!", today);
- 定时发送
我们将刚才的发送邮件作为定时任务加入到配置文件:
[cn.hutool.example.dailyWork]
# 每天下午6点定时发送
MailSendTask.execute = 00 00 18 * * *
- 启动定时任务
// 设置秒匹配(只有在定时任务精确到秒的时候使用)
CronUtil.setMatchSecond(true);
// 启动定时任务,自动加载配置文件中的内容
CronUtil.start();
效果: