熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

Java發送郵件

2013-11-23 18:59:30  來源: Java核心技術 

  記得曾經學習用javamail發郵件學了大概搞明白了利用javamail發郵件的方法和注意事項

  這周末在網上閒逛時發現了另外一個發郵件的好東東

  commonsemailjar: 這是Apache組織下的一個項目主要就是對java的郵件功能進行了封裝用起來更加方便簡單

  接下來我們就說說這個jar包

  首先肯定得下載commonsemailjar並下載mailjar和activationjar(它們可以從sun的網站上下載從下載的javamail和jaf中找到)

  如果沒有mailjar則會有Exception in thread main javalangNoClassDefFoundError: javax/mail/Message 這樣的錯誤提示

  如果沒有activationjar則會有Exception in thread main javalangNoClassDefFoundError: javax/activation/DataSource 這樣的錯誤提示

  下面是一個簡單的測試

  Java代碼

  Java代碼

  import monsmailEmailException;

  import monsmailSimpleEmail;

  public class Send

  {

  public Send()

  {

  }

  public static void main(String[] args)

  {

  send();

  }

  public static void send()

  {

  SimpleEmail email = new SimpleEmail();

  emailsetTLS(true);

  emailsetHostName();

  emailsetAuthentication(*** ***);   //用戶名和密碼

  try

  {

  emailaddTo(l); //接收方

  emailsetFrom(lif);       //發送方

  emailsetSubject(Java Mail Test);         //標題

  emailsetMsg(Just a simple send test );   //內容

  emailsend();

  } catch (EmailException e) {

  eprintStackTrace();

  }

  }

  }

  import monsmailEmailException;

  import monsmailSimpleEmail;

  public class Send

  {

  public Send()

  {

  }

  public static void main(String[] args)

  {

  send();

  }

  public static void send()

  {

  SimpleEmail email = new SimpleEmail();

  emailsetTLS(true); //是否TLS校驗某些郵箱需要TLS安全校驗同理有SSL校驗

  //      emailsetSSL(true);

  emailsetHostName();

  emailsetAuthentication(*** ***);   //用戶名和密碼

  try

  {

  emailaddTo(l); //接收方

  emailaddCc(); //抄送方

  emailaddBcc(); //秘密抄送方

  emailsetSubject(Java Mail Test);         //標題

  emailsetMsg(Just a simple send test );   //內容

  emailsend();

  } catch (EmailException e) {

  eprintStackTrace();

  }

  }

  }

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

  Java代碼

  Java代碼

  import monsmailEmailException;

  import monsmailSimpleEmail;

  public class Send

  {

  public Send()

  {

  }

  public static void main(String[] args)

  {

  send();

  }

  public static void send()

  {

  SimpleEmail email = new SimpleEmail();

  emailsetTLS(true);

  emailsetHostName();

  emailsetAuthentication(lif sdzzczqqyyxy);

  try

  {

  emailaddTo(l);

  emailsetFrom(lif);       //我方

  emailsetSubject(Java發送郵件測試);                 //標題

  emailsetCharset(GB);                     //設置Charset

  emailsetMsg(這是一封Java程序發出的測試郵件);     //內容

  emailsend();

  } catch (EmailException e) {

  eprintStackTrace();

  }

  }

  }

  怎麼樣?簡單吧~~~

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

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

  Java代碼

  import MalformedURLException;

  import URL;

  import monsmailEmailAttachment;

  import monsmailEmailException;

  import monsmailMultiPartEmail;

  publicclass AttachmentMailTest {

  publicstaticvoid main(String[] args) throws EmailException MalformedURLException {

  //     創建一個Email附件

  EmailAttachment emailattachment = new EmailAttachment();

  emailattachmentsetPath(/biao_jpg);

  //     emailattachmentsetURL(new URL());

  emailattachmentsetDisposition(EmailAttachmentATTACHMENT);

  emailattachmentsetDescription(This is Smile picture);

  emailattachmentsetName(bulktree);

  //     創建一個email

  MultiPartEmail multipartemail = new MultiPartEmail();

  multipartemailsetHostName();

  multipartemailaddTo( bulktree);

  multipartemailsetFrom( bulktree);

  multipartemailsetAuthentication(bulktree );

  multipartemailsetSubject(This is a attachment Email);

  multipartemailsetMsg(this a attachment Eamil Test);

  //添加附件

  multipartemailattach(emailattachment);

  //發送郵件

  multipartemailsend();

  Systemoutprintln(The attachmentEmail send sucessful!!!);

  }

  }

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

  不過用這個commonsemailjar實現發郵件還是有個值得注意的地方:

  前面提到mailjar和activationjar包的問題這兩個包需要額外下載並且必不可少的兩個包

  不知是否是我使用錯誤或者軟件環境導致我在第一次使用時出現了一個奇怪的異常:

  Java代碼

  Exception in thread main javalangNoClassDefFoundError: com/sun/mail/util/LineInputStream

  在網上有人說是因為JavaEE版本和JavaMail的版本不一致導致的我用的是jdk查了半天沒找到是哪裡沖突了於是我建web項目時選擇版本於是沒有出現任何問題可以正常使用估計應該是myeclipse建項目時自帶的jar包引起了這個問題我用的是myeclipse 不知道在eclipse或其他版本的myeclipse上是否會出現這個問題如果有知道緣由的朋友請多指教

  高手的分割線~

  ————————————————————————————————————

  萬分感謝黑毛(有人如是說黑色頭發簡稱黑毛老紫竹孫yujia

  接收郵件

  Exception in thread main javalangNoClassDefFoundError: com/sun/mail/util/LineInputStream

  當出現以上錯誤時恭喜您已經離接收郵件不遠了否則請您解決好所有的異常後再來看這個帖子

  javaxmail和javaxactivation這兩個包已經在javaEE當中屬於基礎包了就是JDK中自帶了已經但是裡面的方法與現在外面的mailjar和activationjar有一些出入所以初學者在直接copy別人代碼的時候往往會出現上面的錯誤

  廢話不多說下面是解決方法

  進到

  X:\Program Files\MyEclipse \myeclipse\eclipse\plugins\comgenuitere_zmyeclipse\data\libraryset\EE_

  這個路徑裡可以看到javaeejar用rar把這個文件打開然後進到javax文件夾裡刪除mailjar和activationjar(我的javaeejar裡這兩個東西是文件夾總之刪掉就OK不過要注意備份一下)

  刪掉之後運行下面的代碼經行簡單的修改以後就可以實現接收郵件的功能了!我已經測試過完全可行


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26102.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.