賽迪網 > IT技術 Java > (最新更新)Java基礎
  IT資訊搜索
 
IT產品搜索
[程式開發][網管世界][網路安全][數據庫技術]
[作業系統][嘉賓聊天·線上訪談][活動集錦]
[精彩專題][Symantec專區][訂閱IT技術週刊]
[開發論壇][網管論壇][安全論壇][數據庫論壇]
[作業系統論壇][Sybase專區][IBM dW技術專區]
[病毒求助][病毒與漏洞播報][文檔·源碼下載]

編寫可線上收發E-mail的Java Applet (1)

發佈時間:2006.07.06 01:26     來源:javajia    作者:

說起Java,有些人可能會想到一些用於修飾主頁的Applet,例如著名的水光倒影Lake.class等。其實這些Applet只是Java應用的很小一個方面。作為一種新興的網路語言,Java用於編寫基於TCP/IP的應用才算用到了點子上。在編寫TCP/IP的應用方面,Java是我所用過的編程語言中最簡潔、最快速的。本文將討論如何用Java來編寫可根據SMTP和POP3協議來收發E-mail的Java Applet。



  一.Java網路編程初步



  1.建立TCP/IP連接



  Socket類中的構造函數Socket(String host,int port)用於創建一個Socket,並與指定的主機(host)及端口(port)連接。由於受到Java Applet安全機制的限制,主機名不可以任意指定,而應和被調用的Applet所在主機的名字相同。因此,可先由GetCodeBase方法取得瀏覽器當前讀取的CLASS文件所在的URL,再通過GetHost方法從該URL返回用字符串表示的該主機的名稱。例如從http://person.zj.cninfo.net/~caveman/這個URL中可以返回用字符串表示的主機名"person.zj.cninfo.net"。



  關於標準端口地址的值一般是:SMTP為25、POP3為110、FTP為21等,當然也有的主機用的是非標準的端口,在使用之前最好先確定一下。



  2.數據的發送與接收



  使用Socket類中的GetOutputStream方法可以取得與當前Socket對應的輸出數據流,用DataOutputStream類中的WriteBytes方法可以逐個字符地將數據寫入到輸出數據流中。



  使用Socket類中的GetInputStream方法可以取得與當前Socket對應的輸入數據流,用DataInputStream類中的ReadLine方法可以逐行地讀取輸入數據流中的數據。



  3.關閉TCP/IP連接



  可以用Socket類中的close方法來關閉TCP/IP連接。



  二.基於SMTP協議發送E-mail的Java Applet



  1.SMTP協議和伺服器



  SMTP(Simple Mail Transfer Protocol)協議是目前網上流行的發送E-mail的協議,SMTP協議共有14條命令。不過,發一封E-mail只需用如下5條命令就足夠了(見表1)。



  表1



   命 令 功 能



  HELO 與SMTP伺服器握手,傳送本機域名



  MAIL FROM: 傳送發信者的信箱名稱



  RCPT TO: 傳送接收者的信箱名稱



  DATA 發送信件數據(包括信頭和信體)



  QUIT 退出與SMTP伺服器的連接



  



  除了ISP提供的SMTP伺服器以外,國內一些存放免費個人主頁的伺服器的SMTP端口也是打開的,如果該伺服器對外來的E-mail沒有增加RELAY限制(例如網易nease.net就有此限制),那麼也可以把它當作SMTP伺服器來用。如Person.zj.cninfo.net等,在這些伺服器上放一個下面要編的Java Applet和調用它的htm文件,用戶就可以實現線上發送E-mail了。



  2.SMTPtester.java中的主要程式



  該Java Applet用了三個文本條(TextField)部件tf1、tf2和tf3,它們分別用來供用戶輸入發信者的信箱名稱、接收者的信箱名稱和信件的標題;還用了兩個文本區(TextArea)部件ta1和ta2,ta1供用戶輸入信體內容,ta2用來顯示Smtp伺服器的應答資訊和出錯資訊等;當然還用了一個按鈕(Button)部件bu1,用戶輸入正確的資訊後,用滑鼠點擊一下它,信件就可以被發出去了。



  事件捕獲處理程式見程式1:



  public boolean handleEvent(Event event1)



  {



   if ((event1.target != bu1) || (event1.id != 1001))



   /*如果不是按鈕bu1被滑鼠按下*/



   {



   return false;



   }



   if (!((tf1.getText().length() == 0) || (tf2.getText().length() == 0)))



   /*如果發信者和收信人的信箱名稱都填好了,執行發信程式Bu1run*/



   { bu1.disable();



   bu1run();



   return true;



   }



   ta2.appendText("Please give me enough information to send your email!\n");



   return true;



  }



  (程式1)



  發送E-mail程式bu1run見程式2:



  public void bu1run()



  {



   try



   {



  Socket socket1= new Socket(getCodeBase().getHost(),25);



  

1 2 3 下一頁>>


[ 發表評論 ] 字體[  ] [ 列印 ] [ 進入博客 ] [ 進入論壇 ]  [ 推薦給朋友 ]
  相關文章
· java-Vector類在Java編程中的應用 (07-05) · Hibernate面臨專利訴訟,或遭遇禁止令! (07-05)
· J2EE綜合:J2EE相關設計模式討論 (07-04) · Java Socket網路編程初級入門 (07-04)
· J2EE綜合:Log4j基本使用方法 (07-04) · 跟我學Java之Java GUI的發展與演化 (07-04)
· JAVA基礎:編程中可能出現的問題! (07-04) · 跨越邊界:Java模型以外的類型策略 (07-04)
· J2SE:通過身份證號得出用戶的性別! (07-04) · lucene全文檢索應用示例及代碼簡析 (07-04)
  客戶需求反饋表
* 姓  名:
更多資料  了解方案  認識廠商
* 單位名稱:
* 聯繫電話:
* 電子郵件:
  賽迪推薦  
  手機·資費 ·新品·導購·評測·手機資費·寬帶
手機搜索  諾基亞 N73 MOTO Z6
  IT產品 ·筆記本·臺式機·伺服器·列印·投影
IT產品搜索 
  IT技術 ·開發·網管·安全·數據庫·作業系統
  資訊化 ·熱點·專題·訪談·週刊·方案案例
· 移動資訊化市場方興未艾 企業呼喚標準出臺
· 如何把握企業價值差異 避免CRM與SCM脫節
· 齊看四大廠商的SaaS動態 ERP案例分析
· 通方期貨CRM解決方案 方正電子公文系統
  IT博客 ·曾劍秋·項立剛·Java學習·網管
  IT技術論壇 ·開發·網管·安全·數據庫·系統