封装Javamail的原因
两个字需求
1. 去年已经写过一个Message channel,抽象出了消息发送的统一接口,已经支持FTP, JMS。底层还提出来了一套统一的connection pool结构。用户通过依赖注入方式配置选择通信方式,connection pool的策略,具体实现在代码中对用户都是透明的,用户可以方便地通过配置文件切换选择的通信方式。Email通信方式也需要加到这套已有的设计上。
2. 直接使用javaMail,用户需要自己处理整个email的复杂结构,比如在接收时还需要处理正文和附件,并存储,使用完后还需要清理。
3. 用户可以提供邮件模板,从业务程序的上下文环境中提取有用的信息,替换模板中的placeholder,形成邮件内容。
4. 自动ACK,每收到一份邮件,就自动发送应答,应答也提供了模板定制功能,可以引用原邮件的标题,附件,正文等。
5. 邮件匹配和过滤,javamail提供了search功能,可以对邮件进行过滤,但是它不满足1中系统中已有的接口。
6. 对于匹配和过滤邮件,javamail已经设计了套语言的面向对象模型(SearchTerm, AndTerm, OrTerm, NotTerm…)。但是在实际应用中,我们不可能让用户直接使用这套面向对象机制,特别是前台用户,前台用户应该只需要提供一个表达式,描绘出接收的邮件必须满足的格式,然后后台把用户的表达式解释成javamail的面向对象模型。这就需要我们设计DSL和解释器。
7. 默认情况下用JavaMail收发中文邮件会出现乱码
8. 可对email socket connection 进行pool,提高性能
9. 在发送和接收时,Email Message需要序列化下来,并可反序列化。在发送时,偶尔也会衰地遇到SMTP服务器down掉的情况,这时email message需要能够备份下来,并能自动retry重发。
上文: 在JavaMail的基础上构建自己的Email Channel(1):基础知识