封裝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):基礎知識