用Java實(shí)現(xiàn)SMTP服務(wù)器_第1頁(yè)
用Java實(shí)現(xiàn)SMTP服務(wù)器_第2頁(yè)
用Java實(shí)現(xiàn)SMTP服務(wù)器_第3頁(yè)
用Java實(shí)現(xiàn)SMTP服務(wù)器_第4頁(yè)
用Java實(shí)現(xiàn)SMTP服務(wù)器_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、電子郵件傳遞可以由多種協(xié)議來(lái)實(shí)現(xiàn)。目前,在internet 網(wǎng)上最流行的三種電子郵件協(xié)議是smtp、pop3 和 imap,下面分別簡(jiǎn)單介紹。 smtp 協(xié)議 簡(jiǎn)單郵件傳輸協(xié)議(simple mail transfer protocol,smtp)是一個(gè)運(yùn)行在tcp/ip之上的協(xié)議,用它發(fā)送和接收電子郵件。smtp 服務(wù)器在默認(rèn)端口25上監(jiān)聽(tīng)。smtp客戶使用一組簡(jiǎn)單的、基于文本的命令與smtp服務(wù)器進(jìn)行通信。在建立了一個(gè)連接后,為了接收響應(yīng),smtp客戶首先發(fā)出一個(gè)命令來(lái)標(biāo)識(shí)它們的電子郵件地址。如果smtp服務(wù)器接受了發(fā)送者發(fā)出的文本命令,它就利用一個(gè)ok響應(yīng)和整數(shù)代碼確認(rèn)每一個(gè)命令??蛻舭l(fā)

2、送的另一個(gè)命令意味著電子郵件消息體的開(kāi)始,消息體以一個(gè)圓點(diǎn)“.”加上回車符終止。 pop3 協(xié)議 郵局協(xié)議(post office protocol version 3,pop3)提供了一種對(duì)郵件消息進(jìn)行排隊(duì)的標(biāo)準(zhǔn)機(jī)制,這樣接收者以后才能檢索郵件。pop3服務(wù)器也運(yùn)行在tcp/ip之上,并且在默認(rèn)端口110上監(jiān)聽(tīng)。在客戶和服務(wù)器之間進(jìn)行了初始的會(huì)話之后,基于文本的命令序列可以被交換。pop3客戶利用用戶名和口令向pop3服務(wù)器認(rèn)證。pop3中的認(rèn)證是在一種未加密的會(huì)話基礎(chǔ)之上進(jìn)行的。pop3客戶發(fā)出一系列命令發(fā)送給pop3服務(wù)器,如:請(qǐng)求客戶郵箱隊(duì)列的狀態(tài)、請(qǐng)求列出的郵箱隊(duì)列的內(nèi)容和請(qǐng)求檢索實(shí)

3、際的消息。pop3代表一種存儲(chǔ)轉(zhuǎn)發(fā)類型的消息傳遞服務(wù)?,F(xiàn)在,大部分郵件服務(wù)器都采用smtp發(fā)送郵件,同時(shí)使用pop3接收電子郵件消息。 imap 協(xié)議 internet 消息訪問(wèn)協(xié)議(internet message access protocol,imap)是一種電子郵件消息排隊(duì)服務(wù),它對(duì)pop3的存儲(chǔ)轉(zhuǎn)發(fā)限制提供了重要的改進(jìn)。imap也使用基于文本命令的語(yǔ)法在tcp/ip上運(yùn)行,imap服務(wù)器一般在默認(rèn)端口143監(jiān)聽(tīng)。imap服務(wù)器允許imap客戶下載一個(gè)電子郵件的頭信息,并且不要求將整個(gè)消息從服務(wù)器下載至客戶,這一點(diǎn)與pop3是相同的。imap服務(wù)器提供了一種排隊(duì)機(jī)制以接收消息,同時(shí)必須

4、與smtp相結(jié)合在一起才能發(fā)送消息。 下面以smtp發(fā)送電子郵件為例講解怎樣用java 實(shí)現(xiàn)smtp 服務(wù)器應(yīng)用功能,從而完成郵件的發(fā)送的。 smtp 命令smtp協(xié)議是目前網(wǎng)上流行的發(fā)送e-mail的協(xié)議,smtp協(xié)議共有14條命令。不過(guò),發(fā)一封e-mail只需用如下5條命令就足夠了,分別為: helo sp domain crlf ,與smtp服務(wù)器握手,傳送本機(jī)域名; mail sp from:reverse-path crlf,傳送發(fā)信者的信箱名稱; rcpt sp to:forward-path crlf,傳送接收者的信箱名稱; data crlf,發(fā)送信件數(shù)據(jù)(包括信頭和信體);

5、quit crlf,退出與smtp服務(wù)器的連接。 url收藏 /java/d520876060.html java實(shí)現(xiàn)的18位身份證格式驗(yàn)證算法用java實(shí)現(xiàn)ftp批量大文件上傳下載(java實(shí)現(xiàn)ftp功能冒泡排序算法的java實(shí)現(xiàn)用java實(shí)現(xiàn)音頻播放用java實(shí)現(xiàn)網(wǎng)絡(luò)語(yǔ)音信號(hào)傳送八皇后問(wèn)題的java實(shí)現(xiàn)用java實(shí)現(xiàn)rsa算法用java實(shí)現(xiàn)oracle數(shù)據(jù)庫(kù)的文件上傳上樓梯算法的java實(shí)現(xiàn) 編程思路首先我們?cè)O(shè)計(jì)一個(gè)郵件發(fā)送程序的交互界面,界面中包括用戶輸入郵件的收件人、發(fā)信人和主題組件的單行文本框,書寫郵件內(nèi)容的多行文本框等。然后為了能夠?qū)崿F(xiàn)e-m

6、ail的發(fā)送和設(shè)置,我們?cè)O(shè)計(jì)一個(gè)smtpmail類,它封裝了與郵件服務(wù)器之間的socket 通信操作,以及smtp 命令的發(fā)送和響應(yīng)信息的接收。 編程技巧說(shuō)明1.設(shè)置窗體和組件 我們?cè)O(shè)計(jì)了一個(gè)mailsendframe()類繼承frame 對(duì)象,作為容納組件的主窗體。main()函數(shù)實(shí)現(xiàn)將窗體啟動(dòng)時(shí)置于屏幕的正中央,窗口定義代碼如下: public static void main(string args) mailsendframe mailsendframe = new mailsendframe();dimension screensize = toolkit.getdefaulttoo

7、lkit().getscreensize();dimension framesize = mailsendframe.getsize();if (framesize.height screensize.height) framesize.height = screensize.height;if (framesize.width screensize.width) framesize.width = screensize.width;mailsendframe.setlocation(screensize.width - framesize.width) / 2, (screensize.he

8、ight - framesize.height) / 2);mailsendframe.setvisible(true);mailsendframe.show();在main()函數(shù)中,首先利用代表系統(tǒng)信息的toolkit對(duì)象得到當(dāng)前系統(tǒng)中設(shè)置的屏幕分辨率,并且用分辨率和窗體的大小作比較,然后,調(diào)用mailsendframe的setlocation()方法設(shè)置窗體的左上角坐標(biāo),使窗體的中心和屏幕的中心正好重合,從而將窗體居中。 /組件實(shí)例變量的定義panel panelmain = new panel();panel panelup = new panel();panel panel3 = n

9、ew panel();panel panel4 = new panel();panel panel6 = new panel();panel panel7 = new panel();textfield txtserver = new textfield();textfield txtto = new textfield();textfield txtfrom = new textfield();textfield txtsubject = new textfield();panel panel8 = new panel();label lblfile = new label();button

10、 cmdbrowse = new button();panel paneldown = new panel();textarea txtmail = new textarea();panel panel10 = new panel();button cmdsend = new button();button cmdexit = new button();.panelmain.add(panelup, null);panelup.add(panel3, null);panel3.add(new label(發(fā)信服務(wù)器:), null);panel3.add(txtserver, null);pa

11、nelup.add(panel4, null);panel4.add(new label(收件人:), null);panel4.add(txtto, null);panelup.add(panel6, null);panelup.add(panel7, null);panel7.add(new label(主題:), null);panel7.add(txtsubject, null);panel6.add(new label(發(fā)件人:), null);panel6.add(txtfrom, null);panelup.add(panel8, null);panel8.add(new lab

12、el(附件: ), null);panel8.add(lblfile, null);panel8.add(cmdbrowse, null);panelmain.add(paneldown, null);paneldown.add(txtmail, borderlayout.center);paneldown.add(panel10, borderlayout.south);panel10.add(cmdsend, null);panel10.add(cmdexit, null);paneldown.add(new label( ), borderlayout.east);paneldown.a

13、dd(new label( ), borderlayout.west);.窗體組件的定義都是在init()方法中完成,設(shè)置好收件人、發(fā)信人和主題組件的單行文本框,書寫郵件內(nèi)容的多行文本框,以及附件中的瀏覽按鈕、發(fā)送和退出按鈕。 /java/d520876060.html java實(shí)現(xiàn)的18位身份證格式驗(yàn)證算法用java實(shí)現(xiàn)ftp批量大文件上傳下載(java實(shí)現(xiàn)ftp功能冒泡排序算法的java實(shí)現(xiàn)用java實(shí)現(xiàn)音頻播放用java實(shí)現(xiàn)網(wǎng)絡(luò)語(yǔ)音信號(hào)傳送八皇后問(wèn)題的java實(shí)現(xiàn)用java實(shí)現(xiàn)rsa算法用java實(shí)現(xiàn)oracle數(shù)據(jù)庫(kù)的文件上傳上樓梯算法的java

14、實(shí)現(xiàn) 2窗體中的事件處理 事件處理也是在init()方法中完成。選取附件文件的“瀏覽”按鈕的事件處理,在單擊該按鈕時(shí),打開(kāi)一個(gè)openfiledialog 文件對(duì)話框,讀取用戶所選取的文件名。打開(kāi)文件對(duì)話框的“瀏覽”按鈕的代碼如下: private filedialog openfiledialog= new filedialog(this,打開(kāi)文件,filedialog.load);public mailsendframe() try init();catch(exception e) e.printstacktrace();.單擊“發(fā)送”按鈕的事件處理,實(shí)現(xiàn)用戶填寫郵件信息的收集和郵件的發(fā)

15、送操作?!鞍l(fā)送”按鈕的代碼如下: cmdsend.addactionlistener(new java.awt.event.actionlistener() public void actionperformed(actionevent e) cmdsend_actionperformed(e);實(shí)現(xiàn)cmdsend_actionperformed()方法如下: void cmdsend_actionperformed(actionevent e) mailsender.setfrom(txtfrom.gettext().trim();mailsender.setto(txtto.gettext

16、().trim();mailsender.addheader(subject,txtsubject.gettext().trim() ;mailsender.adddata(txtmail.gettext() ;if(!lblfile.gettext().trim().equals() )mailsender.addattachment(lblfile.gettext().trim();mailsender.open(txtserver.gettext().trim(),25);mailsender.transmit();mailsender.close();單擊“退出”按鈕的事件處理,實(shí)現(xiàn)程

17、序的退出和窗體的關(guān)閉?!巴顺觥卑粹o和偵聽(tīng)器的程序代碼如下: cmdexit.addactionlistener(new java.awt.event.actionlistener() public void actionperformed(actionevent e) cmdexit_actionperformed(e);this.addwindowlistener(new java.awt.event.windowadapter() public void windowclosing(windowevent e) this_windowclosing(e);上面程序分別為退出和窗體注冊(cè)事件的

18、偵聽(tīng)器或適配器,它們處理各自的交互動(dòng)作。實(shí)現(xiàn)cmdexit_actionperformed()和this_windowclosing()方法如下: void cmdexit_actionperformed(actionevent e) system.exit(0);void this_windowclosing(windowevent e) system.exit(0);保留: /java/d520876060.html java實(shí)現(xiàn)的18位身份證格式驗(yàn)證算法用java實(shí)現(xiàn)ftp批量大文件上傳下載(java實(shí)現(xiàn)ftp功能冒泡排序算法的java實(shí)現(xiàn)用jav

19、a實(shí)現(xiàn)音頻播放用java實(shí)現(xiàn)網(wǎng)絡(luò)語(yǔ)音信號(hào)傳送八皇后問(wèn)題的java實(shí)現(xiàn)用java實(shí)現(xiàn)rsa算法用java實(shí)現(xiàn)oracle數(shù)據(jù)庫(kù)的文件上傳上樓梯算法的java實(shí)現(xiàn) 3.smtpmail 類的實(shí)現(xiàn) 采用open()方法,建立與郵件服務(wù)器之間的tcp/ip 連接,創(chuàng)建套接字,并且得到發(fā)送命令所用的輸出流send 和接收服務(wù)器相應(yīng)所用的輸入流rev。open()方法的代碼如下: public int open(string servername, int port)trymailsocket = new socket(servername, port);send = new printwriter(ma

20、ilsocket.getoutputstream(), true);recv = new bufferedreader(new inputstreamreader(mailsocket.getinputstream();string s1 = recv.readline();char c = s1.charat(0);if(c = 4) | (c = 5)return 0;catch(exception e)return 0;return 1;在smtpmail 類中,通過(guò)transmit()方法完成發(fā)送任務(wù)。transmit()方法的代碼如下: public int transmit()bo

21、olean flag = true;/發(fā)送helo 命令if(domain.length() != 0)int i = sendstring(helo + domain);if(i != 1)return 0;/發(fā)送mail from 命令(發(fā)件人)if(from.length() != 0)int j = sendstring(mail from: + from);if(j != 1)return 0;/發(fā)送rcpt to 命令(收件人)if(to.length() != 0)int k = sendstring(rcpt to: + to);if(k != 1)return 0;/發(fā)送郵件

22、正文(data 命令)if(sendstring(data) != 1)return 0;/發(fā)送郵件頭信息for(int l = 0; l x_set.size(); l += 2string s = (string)x_set.elementat(l);send.println(s + : + x_set.elementat(l + 1);/發(fā)送時(shí)間及相關(guān)內(nèi)容格式說(shuō)明if(x_set.indexof(date) 0send.println(date: + (new date().tostring();. 使用sendstring()方法來(lái)發(fā)送字符串命令,并且接收郵件服務(wù)器的響應(yīng)信息,判斷命令

23、是否被接收。返回1表示命令被拒絕執(zhí)行,返回0表示命令被接受。sendstring()方法的代碼如下: private int sendstring(string s)string s1 = ;trysend.println(s);s1 = recv.readline();catch(exception e)system.out.print(s1);return 0;if(s1.length() = 0)return 0;char c = s1.charat(0);return !(c = 4) | (c = 5) ? 1 : 0;使用close()方法來(lái)關(guān)閉與服務(wù)器之間的套接字連接。該方法發(fā)送

24、“quit”命令,收到響應(yīng)消息后,才真正關(guān)閉連接。close()方法的代碼如下: public int close()int i = 0;tryi += sendstring(quit);mailsocket.close();catch(exception e)return 0;return i = 0 ? 1 : 0;url查看 /java/d520876060.html 訪問(wèn)地址 /java/d520876060.htmljava實(shí)現(xiàn)的18位身份證格式驗(yàn)證算法用java實(shí)現(xiàn)ftp批量大文件上傳下載(java實(shí)現(xiàn)

25、ftp功能冒泡排序算法的java實(shí)現(xiàn)用java實(shí)現(xiàn)音頻播放用java實(shí)現(xiàn)網(wǎng)絡(luò)語(yǔ)音信號(hào)傳送八皇后問(wèn)題的java實(shí)現(xiàn)用java實(shí)現(xiàn)rsa算法用java實(shí)現(xiàn)oracle數(shù)據(jù)庫(kù)的文件上傳上樓梯算法的java實(shí)現(xiàn) mailsendframe.java源程序代碼如下: import java.awt.*;import java.awt.event.*;public class mailsendframe extends frame smtpmail mailsender=new smtpmail();panel panelmain = new panel();panel panelup = new pan

26、el();panel panel3 = new panel();panel panel4 = new panel();panel panel6 = new panel();panel panel7 = new panel();textfield txtserver = new textfield();textfield txtto = new textfield();textfield txtfrom = new textfield();textfield txtsubject = new textfield();panel panel8 = new panel();label lblfile

27、 = new label();button cmdbrowse = new button();panel paneldown = new panel();textarea txtmail = new textarea();panel panel10 = new panel();button cmdsend = new button();button cmdexit = new button();private filedialog openfiledialog= new filedialog(this,打開(kāi)文件,filedialog.load);public mailsendframe() t

28、ry init();catch(exception e) e.printstacktrace();public static void main(string args) mailsendframe mailsendframe = new mailsendframe();dimension screensize = toolkit.getdefaulttoolkit().getscreensize();dimension framesize = mailsendframe.getsize();if (framesize.height screensize.height) framesize.h

29、eight = screensize.height;if (framesize.width screensize.width) framesize.width = screensize.width;mailsendframe.setlocation(screensize.width - framesize.width) / 2, (screensize.height - framesize.height) / 2);mailsendframe.setvisible(true);mailsendframe.show();private void init() throws exception t

30、his.setlayout(new borderlayout();panelmain.setlayout(new gridlayout(2,1);panelup.setlayout(new gridlayout(6,1);panel3.setlayout(new flowlayout();this.setvisible(true);./smtpmail.java 的源代碼import java.io.*;import .socket;import java.util.*;public class smtpmailprivate boolean sendconf=false;public static final int ok = 1;public static final int error = 0;p

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論