程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> Java中使用XML創建EMAIL模板

Java中使用XML創建EMAIL模板

編輯:JAVA編程入門知識

  發送郵件是web應用系統的一個基本功能。一般來說,郵件都有特定的類型,比如說密碼提醒,歡迎信息,訂單確認或者收信確認。盡管不同應用郵件的內容各不相同,但是發送郵件的過程基本上是一樣的。 構建消息,發送給郵件服務器,發送。
  
   <!-- frame contents --> <!-- /frame contents -->   當使用Java開發的時候,我們經常使用JavaMail API 來連接郵件服務器發送郵件。但是這種方式過於粗笨(主要由郵件的靈活性造成的),所以當你需要多次使用這種方式發送郵件的時候,最好寫一個wrapper.根據使用的方式不同,wrapper可以是發送某一特定的郵件,比如說密碼提醒,或者作為一種通用的模式,接受主題,接收人,郵件內容作為參數。
  
  一旦使用wrapper發送郵件,你需要一個自主構建消息的系統。讓我們使用密碼提醒作為例子。基本上所有的郵件都包含主題,內容和接收人。當我們發送密碼提醒郵件的時候,用戶地址和密碼是從某個記錄登陸信息的知識庫裡提取的。主題和內容需要和數據庫提取的數據合並,並且被保存在某個地方。系統設計最大的問題就是在什麼地方保存這種類型的字符串。在很多情形下,字串被保存在屬性文件裡,這種方式分離了數據和源代碼,並且使本地化更加輕易。我在很多web應用系統中使用了這種存儲機制,但很不幸的是,這種方式有很多缺陷。
  
  以下是利用屬性文件存儲郵件字串不合適的原因:
  
  ·屬性文件使用一種非常簡單的數據結構-名稱和值組合。當你需要很多值對應一個名稱的時候這種結構就不合適了。比如,一個郵件有4個接收人,3個抄送人,使用屬性文件很難解決這個問題。
  
  ·屬性文件的格式非常嚴格。名稱和值必須在同一行上,所以當你編輯文件的時候長字符串是很難處理的。比如,把一個郵件的所有內容放進屬性文件是一件多麼痛苦的事情。假如你希望值的內容包括換行,你必須使用
  
  另一種選擇是使用XML作為郵件模板,這也是本篇文章所要討論的內容。XML為你構建模板提供了極大的靈活性,並且它不會有屬性文件所有的格式限制,因此這種方式很輕易處理長字符串。XML主要弱勢就是它處理起來比屬性文件復雜。使用屬性文件的時候,裝載文件和裝載後訪問文件非常輕易。而裝載XML文件和使用java提供的多個XML處理庫之一處理XML文件就需要更多的工作了。
  
  這篇文章提供了一個通用的模板使你能夠使用XML文件創建模板並且發送郵件,希望由此能夠減輕這個過程的痛苦。在這個模板裡,我將使用Jakarta 項目裡的Commons Digester 包來處理XML,使用JavaMail API發送郵件。   
  郵件模板
  
  讓我們來看看郵件模板的格式。模板是XML文件,它包含一個根元素和一系列根的子元素。根元素是。必要的子元素是, , 和 。可選的子元素是 , , 和 。假如你使用過郵件系統,那麼你可以推導出這些元素實際包含的內容。可選的元素有多個實例,所以你可以為每種類型的接收者指定多個地址。我待會會在描述消息處理的時候來解釋運行機制。以下是一個模板文件的例子。
  
   [email protected]
  [email protected]
  [email protected]
  [email protected]
  This is the subject
  This is the body of an email message.
  可定制的模板
  
  屬性文件的一個有用的特性是你可以使用MessageFormat 類用動態傳入的值替代屬性文件裡的被指定參數。比如說,假如你需要在屬性文件裡指定errors,其中一個errors是file not found, 你可以這樣寫:
  file.not.found.error=Error, could not find file {0}.
  
  然後,在運行時刻,你這樣使用MessageFormat:
  
   ResourceBundle bundle = ResourceBundle.getBundle(
  "MyProperties", currentLocale);
  Object[] arguments = { "some_file.txt" };
  String newString = MessageFormat.format(
  bundle.getString("file.not.found.error"), arguments);
  最後,newString 將包含Error, could not find file some_file.txt.我在這個系統裡加入了類似的靈活性。 可以格式化所有的字符串,所以你可以在郵件模版的subject 和body元素裡內嵌在屬性文件使用的同樣的令牌。
  
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved