背景

甲方爸爸:新接入业务在国庆以及军运会期间需要每天巡检业务并发送邮件告知具体情况!

我司:没问题。

甲方爸爸:假期也要发噢。

我司:没问题(。。。)。

刚开始计划指定几个同事轮流发送,业务只要不被攻击一般是没有问题的。但是想一想休息日还要处理工作上的事情(非紧急的)就不爽,近几年一直在做前端的事情,后台碰的少,毕竟也接触过,所以决定搞一个定时发送邮件的程序,遂上网查找资料。

邮件类选择

在网上大致上看了下,目前有两种方案:

  1. 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();         }
  1. 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任务
    定义需要执行的任务。该类是一个接口,只定义一个方法