基于命令行的邮件群发程序

最近需要帮助HR写一个群发工资邮件的程序,这个程序考虑只有一个用户使用,尽可能简单,所以就决定实现一个基于命令行交互的小程序。以前是没怎么写过这种程序的,实际写下来发现,也没有那么容易,想写得好,给到用户一些提示,需要在这些交互动作以及文本提示的格式上下点功夫。

一开始想用以前的方式采用Java的System.in来读取用户的输入进行交互,后来发现java6中的一个新的工具Console类,这个类提供了便捷的读取用户输入的方法,同时更加重要的是支持读取密码的方法:readPassword,这样用户在输入密码的时候就可以保证不被旁边的人看到,增强了一些安全性。

下面总结一下这个程序由最开始一个很快开发出来的可用版本,经过不断修改后变成一个比较完善的版本的过程。

程序一开始就采用Spring进行开发,Spring已经封装好了一些发送邮件的类和API使用起来比较简单。开始测试就用的Gmail的SMTP服务器。

这个程序考虑到邮件的内容可以不断的修改,所以一开始就采用了Velocity来实现邮件模板。

然后由于邮件发送的内容里面有很多的敏感信息,所以需要输入密码之后才能执行。密码采用md5进行加密。

发送成功后,要有统计的报告,比如:多少发送成功,多少发送失败,原因是什么,及时反馈发送的结果。

下面说说细节问题:

1、一开始Velocity模板,按照自己的习惯就命名成.vm的扩展名。但是,这个文件以后需要使用者来编辑的,所以.vm扩展名,明显不方便直接编辑,所以后来就改成了.txt的扩展名。

2、邮件的内容在模板里面,但是一开始标题是写在代码中的,这样就没有考虑以后修改邮件标题的可能。后来改成,邮件标题就是模板文件的标题。方便使用者更改和确认。

3、程序打包后生成的jar包,这个一定要取一个正式的,清楚的名字。不要起一些通用的,容易误解的名字。

4、邮件的附件由于是中英文混写的,所以还需要考虑外国人的阅读习惯,英文单词的前后一定要有空格。(要不然很可能那个国外大老板就会看着很不爽哦。)

5、然后发送的过程中,这些可能变化的内容,包括标题,邮件内容要回显给用户,让用户再次确认。

6、接下来要发会发送的列表以及发送的数目给到用户确认。

7、内容和标题的确认要采用|分割,把格式弄得更加漂亮

8、由于使用的人,发送者邮箱,邮件服务器都可能变化,所以一开始这些配置文件我放到jar包里面的xml中,但是发现普通用户是无法修改的,所以还是放到jar包外面,采用文本文件进行配置。

9、发送邮件附件有乱码的问题,需要使用MimeUtility.encodeText(file.getName(),"utf-8", null)进行转码。