使用Hutool发送工作日报

原创
2019/06/20 11:39
阅读数 8.1K
AI总结

需求来源

某一天Hutool群中有美女(也可能是抠脚大汉)抱怨领导,说让ta每天写工作日报,说明今天做了哪些工作,每周还有周报。美女遇到问题嘛,本着能聊则聊,能帮则帮的原则,于是使用Hutool写了一个Demo。

使用到的模块和工具类

  1. cron模块,用于定时发送邮件
  2. extra模块,MailUtil,用于发送邮件
  3. 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            ---- 邮箱配置文件

代码实现

  1. 生成日报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;
}
  1. 发送邮件

在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);
  1. 定时发送

我们将刚才的发送邮件作为定时任务加入到配置文件:

[cn.hutool.example.dailyWork]
# 每天下午6点定时发送
MailSendTask.execute = 00 00 18 * * *
  1. 启动定时任务
// 设置秒匹配(只有在定时任务精确到秒的时候使用)
CronUtil.setMatchSecond(true);
// 启动定时任务,自动加载配置文件中的内容
CronUtil.start();

效果:

展开阅读全文
加载中
点击加入讨论🔥(6) 发布并加入讨论🔥
6 评论
2 收藏
7
分享
AI总结
返回顶部
顶部