記得曾經學習用javamail發郵件,學了2天,大概搞明白了利用javamail發郵件的方法和注意事項。
這週末在網上閒逛時,發現了另一個發郵件的好東東。
commons-email-1.1.jar: 這是Apache組織下的一個項目,主要就是對java的郵件功能進行了封裝,用起來更加方便,簡單。
接下來咱們就說說這個jar包。
首先確定得下載commons-email-1.1.jar,並下載mail.jar和activation.jar(它們能夠從sun的網站上下載,從下載的javamail和jaf中找到)。
若是沒有mail.jar,則會有:Exception in thread "main" java.lang.NoClassDefFoundError: javax/mail/Message 這樣的錯誤提示。
若是沒有activation.jar,則會有:Exception in thread "main" java.lang.NoClassDefFoundError: javax/activation/DataSource 這樣的錯誤提示。
下面是一個簡單的測試。 javascript
- Java代碼
- import org.apache.commons.mail.EmailException;
- import org.apache.commons.mail.SimpleEmail;
-
- public class Send
- {
- public Send()
- {
-
- }
-
- public static void main(String[] args)
- {
- send();
- }
-
- public static void send()
- {
- SimpleEmail email = new SimpleEmail();
- email.setTLS(true);
- email.setHostName("smtp.gmail.com");
- email.setAuthentication("***@gmail.com", "***"); //用戶名和密碼
-
- try
- {
- email.addTo("lifangxin2050@163.com"); //接收方
- email.setFrom("lifangxin2050@gmail.com"); //發送方
- email.setSubject("Java Mail Test"); //標題
- email.setMsg("Just a simple send test ."); //內容
- email.send();
-
- } catch (EmailException e) {
- e.printStackTrace();
- }
- }
- }
-
- import org.apache.commons.mail.EmailException;
- import org.apache.commons.mail.SimpleEmail;
-
- public class Send
- {
- public Send()
- {
-
- }
-
- public static void main(String[] args)
- {
- send();
- }
-
- public static void send()
- {
- SimpleEmail email = new SimpleEmail();
- email.setTLS(true); //是否TLS校驗,,某些郵箱須要TLS安全校驗,同理有SSL校驗
- // email.setSSL(true);
- email.setHostName("smtp.gmail.com");
- email.setAuthentication("***@gmail.com", "***"); //用戶名和密碼
-
- try
- {
- email.addTo("lifangxin2050@163.com"); //接收方
- email.addCc("ss327@163.com"); //抄送方
- email.addBcc("ss377@163.com"); //祕密抄送方
- email.setSubject("Java Mail Test"); //標題
- email.setMsg("Just a simple send test ."); //內容
- email.send();
-
- } catch (EmailException e) {
- e.printStackTrace();
- }
- }
- }
上面的郵件標題和內容用的都是英文,若是改成中文呢?我試了一下,結果郵件標題不是亂碼,而郵件內容則中文部分是亂碼。設置其charSet爲GB2312或者UTF-8後就能夠發送中文郵件了,顯示正常了。以下面的代碼。 html
- Java代碼
- import org.apache.commons.mail.EmailException;
- import org.apache.commons.mail.SimpleEmail;
-
- public class Send
- {
- public Send()
- {
-
- }
-
- public static void main(String[] args)
- {
- send();
- }
-
- public static void send()
- {
- SimpleEmail email = new SimpleEmail();
- email.setTLS(true);
- email.setHostName("smtp.gmail.com");
- email.setAuthentication("lifangxin2050@gmail.com", "sdzzczqqyyxy");
-
- try
- {
- email.addTo("lifangxin2050@163.com");
- email.setFrom("lifangxin2050@gmail.com"); //我方
-
- email.setSubject("Java發送郵件測試"); //標題
-
- email.setCharset("GB2312"); //設置Charset
-
- email.setMsg("這是一封Java程序發出的測試郵件。"); //內容
-
- email.send();
-
- } catch (EmailException e) {
- e.printStackTrace();
- }
- }
- }
怎麼樣?簡單吧~~~
有人這時說到了網頁郵件,其實只須要把上面SimpleEmail換成HtmlEmail,而後設置郵件內容的方法由setMsg(String str)變爲setHtmlMsg(String str)就能夠了,這樣就能夠再郵件裏使用<br/>等html標籤來控制郵件的格式了.
還有人問,那麼附件呢?別急,咱們立刻就來作個帶附件發送的代碼 java
- import java.net.MalformedURLException;
-
- import java.net.URL;
-
- import org.apache.commons.mail.EmailAttachment;
-
- import org.apache.commons.mail.EmailException;
-
- import org.apache.commons.mail.MultiPartEmail;
-
- publicclass AttachmentMailTest {
-
- publicstaticvoid main(String[] args) throws EmailException, MalformedURLException {
-
- // 建立一個Email附件
-
- EmailAttachment emailattachment = new EmailAttachment();
-
- emailattachment.setPath("/宣傳單.jpg");
-
- // emailattachment.setURL(new URL("http://www.blogjava.net/bulktree/picture/bulktree.jpg"));
-
- emailattachment.setDisposition(EmailAttachment.ATTACHMENT);
-
- emailattachment.setDescription("This is Smile picture");
-
- emailattachment.setName("bulktree");
-
- // 建立一個email
-
- MultiPartEmail multipartemail = new MultiPartEmail();
-
- multipartemail.setHostName("smtp.163.com");
-
- multipartemail.addTo("bulktree@126.com", "bulktree");
-
- multipartemail.setFrom("bulktree@163.com", "bulktree");
-
- multipartemail.setAuthentication("bulktree", "123456");
-
- multipartemail.setSubject("This is a attachment Email");
-
- multipartemail.setMsg("this a attachment Eamil Test");
-
- //添加附件
-
- multipartemail.attach(emailattachment);
-
- //發送郵件
-
- multipartemail.send();
-
- System.out.println("The attachmentEmail send sucessful!!!");
- }
- }
就這樣,附件也發送成功了,你們能夠試一下,另外這個項目是開源的,你們能夠取下載它的src來看看,我暫時就說到這兒..
不過用這個commons-email-1.1.jar實現發郵件仍是有2個值得注意的地方:
1.前面提到mail.jar和activation.jar包的問題,這兩個包須要額外下載而且必不可少的兩個包
2.不知是不是我使用錯誤或者軟件環境致使,我在第一次使用時,出現了一個奇怪的異常:web
- Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
在網上有人說是由於JavaEE版本和JavaMail的版本不一致致使的.我用的是jdk1.6.查了半天,沒找到是哪裏衝突了,因而我建web項目時,選擇1.4版本,因而沒有出現任何問題,能夠正常使用,估計應該是myeclipse建項目時自帶的jar包引發了這個問題.我用的是myeclipse 6.0.不知道在eclipse或其餘版本的myeclipse上是否會出現這個問題,若是有知道原因的朋友,請多指教.apache
it.econline.net安全