天天看點

java email 郵件

關鍵字: java 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代碼

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("

[email protected]

"); //接收方    

            email.setFrom("

[email protected]

");       //發送方      

            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");       

", "***");   //使用者名和密碼 

        try  

        { 

          email.addTo("

"); //接收方 

            email.addCc("

[email protected]

"); //抄送方   

            email.addBcc("

[email protected]

"); //秘密抄送方

            email.setSubject("Java Mail Test");         //标題    

            email.setMsg("Just a simple send test .");   //内容    

            email.send();  

        } catch (EmailException e) { 

            e.printStackTrace(); 

        }  

}

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

        email.setTLS(true);         

", "sdzzczqqyyxy");    

"); 

");       //我方    

            email.setSubject("Java發送郵件測試");                 //标題    

            email.setCharset("GB2312");                     //設定Charset 

            email.setMsg("這是一封Java程式發出的測試郵件。");     //内容    

怎麼樣?簡單吧~~~

有人這時說到了網頁郵件,其實隻需要把上面SimpleEmail換成HtmlEmail,然後設定郵件内容的方法由setMsg(String str)變為setHtmlMsg(String str)就可以了,這樣就可以再郵件裡使用<br/>等html标簽來控制郵件的格式了.

還有人問,那麼附件呢?别急,我們馬上就來做個帶附件發送的代碼

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("/biao_05.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("

[email protected]

", "bulktree");

       multipartemail.setFrom("

[email protected]

       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.不知是否是我使用錯誤或者軟體環境導緻,我在第一次使用時,出現了一個奇怪的異常:

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上是否會出現這個問題,如果有知道緣由的朋友,請多指教.