Java定时发送邮件
背景
甲方爸爸:新接入业务在国庆以及军运会期间需要每天巡检业务并发送邮件告知具体情况!
我司:没问题。
甲方爸爸:假期也要发噢。
我司:没问题(。。。)。
刚开始计划指定几个同事轮流发送,业务只要不被攻击一般是没有问题的。但是想一想休息日还要处理工作上的事情(非紧急的)就不爽,近几年一直在做前端的事情,后台碰的少,毕竟也接触过,所以决定搞一个定时发送邮件的程序,遂上网查找资料。
邮件类选择
在网上大致上看了下,目前有两种方案:
- MimeMessage
String title = createTitle(); String text = createText(); Properties props = new Properties(); props.put("mail.smtp.host", "smtp.qq.com"); props.put("mail.transport.protocol", "smtp"); props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); props.put("mail.smtp.auth", "true"); Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(from, passwd); } }); MimeMessage message = new MimeMessage(session); try { message.setFrom(new InternetAddress(from)); message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); message.setSubject(title); message.setText(text); System.out.println(text); Transport.send(message); } catch(Exception e) { e.printStackTrace(); }
- SimpleMail
mail.setHostName(host); mail.setAuthentication(user, passwd); mail.setFrom(user); mail.setCharset("UTF-8"); mail.setSubject(title); mail.setSSLOnConnect(true); mail.setMsg(content); mail.addTo(to); mail.send();
在本地重构代码并进行了测试,都是正常发送和接收,个人觉得SimpleMail
看起来更加简洁,所以邮件类就选它了
定时器
网上搜索一大堆,具体就不一一介绍了,我用的是Quartz
Quartz
设计有三个核心类,分别是
- Scheduler 调度器
调度器就相当于一个容器,装载着任务和触发器。该类是一个接口,代表一个Quartz
的独立运行容器,Trigger
和JobDetail
可以注册到Scheduler
中, 两者在Scheduler
中拥有各自的组及名称, 组及名称是Scheduler
查找定位容器中某一对象的依据,Trigger
的组及名称必须唯一,JobDetail
的组和名称也必须唯一(但可以和Trigger
的组和名称相同,因为它们是不同类型的)。Scheduler
定义了多个接口方法, 允许外部通过组及名称访问和控制容器中Trigger
和JobDetail
- Job任务
定义需要执行的任务。该类是一个接口,只定义一个方法