commons-email发邮件

记得曾经学习用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 这样的错误提示。 

下面是一个简单的测试。 

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("[email protected]"); //接收方       
  27.             email.setFrom("[email protected]");       //发送方         
  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("[email protected]"); //接收方    
  64.             email.addCc("[email protected]"); //抄送方      
  65.             email.addBcc("[email protected]"); //秘密抄送方  
  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("[email protected]""sdzzczqqyyxy");       
  23.             
  24.         try     
  25.         {    
  26.             email.addTo("[email protected]");    
  27.             email.setFrom("[email protected]");       //我方       
  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("/宣传单.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("[email protected]""bulktree");  
  36.   
  37.        multipartemail.setFrom("[email protected]""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上是否会出现这个问题,如果有知道缘由的朋友,请多指教.

你可能感兴趣的:(java,email,发)