发送邮件时,比如激活邮件、订单邮件等等往往都需要动态数据的填入,比如客户名、订单号,或者密码。类似于web设计:
邮件的模板:是一个可能具有html格式或类似的模板,是View的角色;
邮件的数据:是Model的角色,填入模板,形成最后的邮件内容。
一个与用户交互加多的系统,邮件的种类是“啥都有的”:各种提醒,各种状态告知,。。。
所以基于配置做法相对比较能够统一模式以及省时省力。
我的做法是使用Velocity定义邮件,通过提供良好设计的API,和配置规定实现。最后使用代码大致如下:
VelocityMailSupport.java -- 提供给程序使用,通过Spring配置注入到被需要的类中,利用本类可方便发送由Velocity模板生成的邮件内容。客户程序可以组合或继承本类,使具有发送邮件功能。
PoolMailSender.java --对Springframework MailSender和JavaMailSender的装饰, 实现装饰器模式。PooledMailSender将要发送邮件进行排队,按FIFO方式发送得到的邮件消息。
applicationContext-mail-template.xml -- 配置所有的邮件模板的VelocityMailSupport实例,比如激活,找回密码等具体velocity模板和邮件subject
applicationContext-mail.xml -- 基础配置applicationContext-mail-template.xml依赖于它
mail_template.properties -- 配置模板位置和subject文本
VelocityMailSupport.java -- 提供给程序使用,通过Spring配置注入到被需要的类中,利用本类可方便发送由Velocity模板生成的邮件内容。客户程序可以组合或继承本类,使具有发送邮件功能。
PoolMailSender.java --对Springframework MailSender和JavaMailSender的装饰, 实现装饰器模式。PooledMailSender将要发送邮件进行排队,按FIFO方式发送得到的邮件消息。
applicationContext-mail-template.xml -- 配置所有的邮件模板的VelocityMailSupport实例,比如激活,找回密码等具体velocity模板和邮件subject
applicationContext-mail.xml -- 基础配置applicationContext-mail-template.xml依赖于它
mail_template.properties -- 配置模板位置和subject文本