javaMail【Z】

liuchang0001發表於2011-04-18

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 這樣的錯誤提示。 

下面是一個簡單的測試。 

Java程式碼  收藏程式碼
  1. Java程式碼  
  2. import  org.apache.commons.mail.EmailException;       
  3. import  org.apache.commons.mail.SimpleEmail;       
  4.       
  5. public   class  Send        
  6. {       
  7.     public  Send()       
  8.     {       
  9.                
  10.     }       
  11.            
  12.     public   static   void  main(String[] args)       
  13.     {       
  14.         send();       
  15.     }       
  16.            
  17.     public   static   void  send()       
  18.     {       
  19.         SimpleEmail email = new  SimpleEmail();          
  20.         email.setTLS(true );               
  21.         email.setHostName("smtp.gmail.com" );             
  22.         email.setAuthentication("***@gmail.com" "***" );    //使用者名稱和密碼        
  23.                
  24.         try         
  25.         {       
  26.             email.addTo("lifangxin2050@163.com" );  //接收方        
  27.             email.setFrom("lifangxin2050@gmail.com" );        //傳送方          
  28.             email.setSubject("Java Mail Test" );          //標題           
  29.             email.setMsg("Just a simple send test ." );    //內容           
  30.             email.send();        
  31.                    
  32.         } catch  (EmailException e) {       
  33.             e.printStackTrace();       
  34.         }        
  35.     }       
  36. }     
  37.   
  38. import  org.apache.commons.mail.EmailException;    
  39. import  org.apache.commons.mail.SimpleEmail;    
  40.    
  41. public   class  Send     
  42. {    
  43.     public  Send()    
  44.     {    
  45.             
  46.     }    
  47.         
  48.     public   static   void  main(String[] args)    
  49.     {    
  50.         send();    
  51.     }    
  52.         
  53.     public   static   void  send()    
  54.     {    
  55.         SimpleEmail email = new  SimpleEmail();       
  56.         email.setTLS(true );  //是否TLS校驗,,某些郵箱需要TLS安全校驗,同理有SSL校驗   
  57. //      email.setSSL(true);           
  58.         email.setHostName("smtp.gmail.com" );          
  59.         email.setAuthentication("***@gmail.com" "***" );    //使用者名稱和密碼     
  60.             
  61.         try      
  62.         {    
  63.           email.addTo("lifangxin2050@163.com" );  //接收方     
  64.             email.addCc("ss327@163.com" );  //抄送方       
  65.             email.addBcc("ss377@163.com" );  //祕密抄送方   
  66.             email.setSubject("Java Mail Test" );          //標題        
  67.             email.setMsg("Just a simple send test ." );    //內容        
  68.             email.send();     
  69.                 
  70.         } catch  (EmailException e) {    
  71.             e.printStackTrace();    
  72.         }     
  73.     }    
  74. }  



上面的郵件標題和內容用的都是英文,如果改為中文呢?我試了一下,結果郵件標題不是亂碼,而郵件內容則中文部分是亂碼。設定其charSet為GB2312或者UTF-8後就可以傳送中文郵件了,顯示正常了。如下面的程式碼。 

Java程式碼  收藏程式碼
  1. Java程式碼  
  2. import  org.apache.commons.mail.EmailException;    
  3. import  org.apache.commons.mail.SimpleEmail;    
  4.    
  5. public   class  Send     
  6. {    
  7.     public  Send()    
  8.     {    
  9.             
  10.     }    
  11.         
  12.     public   static   void  main(String[] args)    
  13.     {    
  14.         send();    
  15.     }    
  16.         
  17.     public   static   void  send()    
  18.     {    
  19.         SimpleEmail email = new  SimpleEmail();       
  20.         email.setTLS(true );            
  21.         email.setHostName("smtp.gmail.com" );          
  22.         email.setAuthentication("lifangxin2050@gmail.com" "sdzzczqqyyxy" );       
  23.             
  24.         try      
  25.         {    
  26.             email.addTo("lifangxin2050@163.com" );    
  27.             email.setFrom("lifangxin2050@gmail.com" );        //我方        
  28.                 
  29.             email.setSubject("Java傳送郵件測試" );                  //標題        
  30.                 
  31.             email.setCharset("GB2312" );                      //設定Charset     
  32.                 
  33.             email.setMsg("這是一封Java程式發出的測試郵件。" );      //內容        
  34.                 
  35.             email.send();     
  36.                 
  37.         } catch  (EmailException e) {    
  38.             e.printStackTrace();    
  39.         }     
  40.     }    
  41. }    



怎麼樣?簡單吧~~~ 
有人這時說到了網頁郵件,其實只需要把上面SimpleEmail換成HtmlEmail,然後設定郵件 內容的方法由setMsg(String str)變為setHtmlMsg(String str)就可以了,這樣就可以再郵件裡使用<br/>等html標籤來控制郵件的格式了. 
還有人問,那麼附件呢?別急,我們馬上就來做個帶附件傳送的程式碼 

Java程式碼  收藏程式碼
  1. import  java.net.MalformedURLException;  
  2.   
  3. import  java.net.URL;  
  4.   
  5. import  org.apache.commons.mail.EmailAttachment;  
  6.   
  7. import  org.apache.commons.mail.EmailException;  
  8.   
  9. import  org.apache.commons.mail.MultiPartEmail;  
  10.   
  11. publicclass AttachmentMailTest {  
  12.   
  13.     publicstaticvoid main(String[] args) throws  EmailException, MalformedURLException {  
  14.   
  15. //     建立一個Email附件   
  16.   
  17.        EmailAttachment emailattachment = new  EmailAttachment();  
  18.   
  19.        emailattachment.setPath("/biao_05.jpg" );  
  20.   
  21. //     emailattachment.setURL(new URL("http://www.blogjava.net/bulktree/picture/bulktree.jpg"));   
  22.   
  23.        emailattachment.setDisposition(EmailAttachment.ATTACHMENT);  
  24.   
  25.        emailattachment.setDescription("This is Smile picture" );  
  26.   
  27.        emailattachment.setName("bulktree" );  
  28.   
  29. //     建立一個email   
  30.   
  31.        MultiPartEmail multipartemail = new  MultiPartEmail();  
  32.   
  33.        multipartemail.setHostName("smtp.163.com" );  
  34.   
  35.        multipartemail.addTo("bulktree@126.com" "bulktree" );  
  36.   
  37.        multipartemail.setFrom("bulktree@163.com" "bulktree" );  
  38.   
  39.        multipartemail.setAuthentication("bulktree" "123456" );  
  40.   
  41.        multipartemail.setSubject("This is a attachment Email" );  
  42.   
  43.        multipartemail.setMsg("this a attachment Eamil Test" );  
  44.   
  45.        //新增附件   
  46.   
  47.        multipartemail.attach(emailattachment);  
  48.   
  49.        //傳送郵件   
  50.   
  51.        multipartemail.send();  
  52.   
  53.       System.out.println("The attachmentEmail send sucessful!!!" );  
  54.     }  
  55. }  



就這樣,附件也傳送成功了,大家可以試一下,另外這個專案是開源的,大家可以取下載它的src來看看,我暫時就說到這兒.. 

不過用這個commons-email-1.1.jar實現發郵件還是有2個值得注意的地方: 
  1.前面提到mail.jar和activation.jar包的問題,這兩個包需要額外下載並且必不可少的兩個包 
  2.不知是否是我使用錯誤或者軟體環境導致,我在第一次使用時,出現了一個奇怪的異常:

Java程式碼  收藏程式碼
  1. 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上是否會出現這個問題

相關文章