基于http協(xié)議的手機(jī)郵件收發(fā)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
基于http協(xié)議的手機(jī)郵件收發(fā)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
基于http協(xié)議的手機(jī)郵件收發(fā)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
基于http協(xié)議的手機(jī)郵件收發(fā)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)
基于http協(xié)議的手機(jī)郵件收發(fā)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩6頁(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、基于http協(xié)議的手機(jī)郵件收發(fā)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)劉洋平 王玉龍 趙偉(合肥學(xué)院電子信息與電氣工程系通信工程專業(yè))摘要:本文介紹了基于http協(xié)議的手機(jī)郵件收發(fā)系統(tǒng)的開發(fā)技術(shù)及其體系結(jié)構(gòu),設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)基于http協(xié)議的手機(jī)郵件收發(fā)系統(tǒng)。系統(tǒng)采用Servlet技術(shù)以及JavaMail技術(shù)作為中間層,解決了郵件收發(fā)的技術(shù)問題;使用了Java ME高級(jí)界面API、多線程和通用連接框架GCF等多項(xiàng)技術(shù)實(shí)現(xiàn)MIDlet客戶端。關(guān)鍵詞:http 手機(jī)郵件 Servlet JavaMail JavaME0 引言隨著移動(dòng)手機(jī)和智能化移動(dòng)終端的實(shí)現(xiàn),越來(lái)越多的用戶習(xí)慣于無(wú)線移動(dòng)通信方式,通過手機(jī)收發(fā)電子郵件作為

2、傳統(tǒng)電腦收發(fā)郵件的一個(gè)補(bǔ)充,可以讓我們更方便、快捷地獲取重要信息。手機(jī)的郵件程序的開發(fā)目前存在兩種方式:第一,是針對(duì)手機(jī)底層專用的API來(lái)開發(fā),一般可有C語(yǔ)言來(lái)開發(fā),這類程序的專用性很強(qiáng),但不利于移植到新的機(jī)器上;第二,使用Java ME技術(shù),利用JAVA的對(duì)設(shè)備無(wú)關(guān)性的特點(diǎn),也就是說(shuō)用它來(lái)開發(fā)程序,可以放在任何一臺(tái)JAVA手機(jī)上,而現(xiàn)在幾乎所有手機(jī)都支持。在使用Java ME之前,手機(jī)連接互聯(lián)網(wǎng)采用的是WAP技術(shù),通過WAP協(xié)議訪問WAP服務(wù)器,中間涉及到協(xié)議轉(zhuǎn)換,將WAP轉(zhuǎn)成HTTP,存在速度慢,持續(xù)在線等缺點(diǎn)。J2ME解決了這個(gè)問題,即應(yīng)采用基于HTTP的傳輸技術(shù)。目前Java ME推出

3、了MIDP2.0簡(jiǎn)表,在這個(gè)表里提供了http、socket、tcp/udp等網(wǎng)絡(luò)連接方式,這樣首先就解決和網(wǎng)絡(luò)互聯(lián)的問題。1 手機(jī)郵件收發(fā)系統(tǒng)設(shè)計(jì)1.1 本系統(tǒng)的原理客戶端MIDlet向中間服務(wù)器tomcat發(fā)送請(qǐng)求,服務(wù)器端Servlet使用javamail的API向POP3,SMTP等郵件服務(wù)器提出要求,從而完成郵件的發(fā)送和接收功能。原理圖如下圖1-1: SMTP SP POP3 SPJavaMailMIDlettomcat 圖1-1 系統(tǒng)原理圖1.2 系統(tǒng)功能描述本系統(tǒng)能夠完成簡(jiǎn)單的郵件編寫和郵件發(fā)送、接收功能。能夠從liuyangping01和liuyangping01兩個(gè)郵箱向其他

4、的郵箱發(fā)送郵件,同時(shí)能夠接收l(shuí)iuyangping01和liuyangping01兩個(gè)郵箱收件箱中的最近一封郵件。1.3 各功能模塊設(shè)計(jì)過程1.3.1 手機(jī)端MIDlet程序的設(shè)計(jì)手機(jī)端程序包括三個(gè)線程,一個(gè)MIDlet主線程類,一個(gè)SendThread發(fā)送線程類,一個(gè)ReceiveThread接收線程類。1)首先使用Alert屏顯制作一個(gè)歡迎界面,介紹本次課程設(shè)計(jì)的基本信息,添加“發(fā)信”和“收信”兩個(gè)菜單,點(diǎn)擊“發(fā)信”菜單啟動(dòng)sendThread線程,顯示sendForm屏顯,點(diǎn)擊“收信”菜單啟動(dòng)receiveThread線程,顯示receiveForm屏顯。這一部分的部分代碼如下:Comm

5、and sendCommand = new Command(發(fā)信, Command.OK, 1);Command receiveCommand = new Command(收信, Command.OK, 2);/歡迎界面Alert splashScreen = new Alert(手機(jī)郵件收發(fā)系統(tǒng), 基于http協(xié)議的手機(jī)郵件收發(fā)系統(tǒng)nn學(xué)生姓名:劉洋平 王玉龍 趙偉n指導(dǎo)教師:李祎n2010年12月, null, AlertType.INFO);protected void startApp() throws MIDletStateChangeException / TODO Auto-ge

6、nerated method stubdisplay = Display.getDisplay(this);message = new Message();sendForm = new SendForm(發(fā)送郵件系統(tǒng),this);receiveForm =new ReceiveForm(接收郵件系統(tǒng),this);contentTextBox = new ContentTextBox(內(nèi)容, null, 600, TextField.ANY, this);splashScreen.addCommand(sendCommand);splashScreen.addCommand(receiveCom

7、mand);splashScreen.setTicker(new Ticker(您好,歡迎使用手機(jī)郵件收發(fā)系統(tǒng),請(qǐng)選擇收信發(fā)信菜單進(jìn)入下一步);splashScreen.setCommandListener(this);display.setCurrent(splashScreen);2)發(fā)送郵件界面:SendForm類繼承于高級(jí)用戶界面Form類,上面添加三個(gè)TextField,用來(lái)添加發(fā)送郵件信息“發(fā)件人”、“收件人”和“主題”,添加一個(gè)菜單“下一步”,當(dāng)點(diǎn)擊“下一步”時(shí)進(jìn)入contentTextBox屏顯,添加郵件內(nèi)容。其部分代碼如下:public void init()fromFiel

8、d = new TextField(發(fā)件人:, null, 30, TextField.ANY);toField = new TextField(收件人:, null, 30, TextField.ANY);subField = new TextField(主題:, null, 30, TextField.ANY);this.append(fromField);this.append(toField);this.append(subField);this.addCommand(MailClient.nextCommand);this.setCommandListener(this);publi

9、c void commandAction(Command cmd, Displayable disp) if(cmd = MailClient.nextCommand)String from = fromField.getString();String to = toField.getString();String subject = subField.getString();if(from.equals() | to.equals() | subject.equals()Alert alert=new Alert(系統(tǒng)提示,請(qǐng)認(rèn)真填寫信息,null,AlertType.CONFIRMATIO

10、N);mailClient.display.setCurrent(alert, this);elsemailClient.getMessage().setFrom(from);mailClient.getMessage().setTo(to);mailClient.getMessage().setSubject(subject);mailClient.getDisplay().setCurrent(mailClient.getContentTextBox();3)接收郵件界面:ReceiveForm類繼承于高級(jí)用戶界面Form類,上面添加一個(gè)TextField,用來(lái)添加郵箱信息“郵件地址”,添

11、加一個(gè)菜單“下一步”,當(dāng)點(diǎn)擊“下一步”時(shí)繼續(xù)程序的執(zhí)行。其代碼如下:private TextField emailAddressField = new TextField(請(qǐng)輸入郵件地址:, null, 30, TextField.ANY);this.append(emailAddressField);this.addCommand(MailClient.nextCommand);this.setCommandListener(this);4)發(fā)送線程:打開一個(gè)HttpConnection接口,定義一個(gè)輸出流,將發(fā)送郵件信息“發(fā)件人”、“收件人”、“主題”和“內(nèi)容”發(fā)送給Servlet進(jìn)行處理

12、,可用如下方法實(shí)現(xiàn):/打開一個(gè)接口httpConnhttpConn=(HttpConnection)Connector.open(http:/localhost:8080/send-mailservlet/mail);httpConn.setRequestMethod(POST);/定義輸出流dos = new DataOutputStream(httpConn.openOutputStream();dos.writeUTF(mailClient.getMessage().getFrom();dos.writeUTF(mailClient.getMessage().getTo();dos.wr

13、iteUTF(mailClient.getMessage().getSubject();dos.writeUTF(mailClient.getMessage().getContent();dos.close();定義一個(gè)輸入流(注:輸入流也可不定義),接收Servlet返回的信息,線程執(zhí)行完畢后返回歡迎界面。5)接收線程:打開一個(gè)HttpConnection接口,定義一個(gè)輸出流,將接收郵件信息“郵件地址”發(fā)送給Servlet進(jìn)行處理,可用如下方法實(shí)現(xiàn):/打開一個(gè)接口httpConnhttpConn =(HttpConnection)Connector.open(http:/localhost:

14、8080/receive-mailservlet/mail);httpConn.setRequestMethod(POST);/定義輸出流dos = new DataOutputStream(httpConn.openOutputStream();dos.writeUTF(mailClient.getMessage().getEmailAddress();dos.close();定義一個(gè)輸入流,接收Servlet返回的信息,線程執(zhí)行完畢后顯示接收的郵件信息。實(shí)現(xiàn)代碼如下:/定義輸入流dis = new DataInputStream(httpConn.openInputStream();mai

15、lContentR = dis.readUTF();dis.close();httpConn.close();System.out.println(end of receiving mail);/實(shí)例化NewMailForm類newMailForm = new NewMailForm(郵件信息, mailClient);for(int i=0; i20000000; i+) /延時(shí)方法/顯示新郵件界面mailClient.display.setCurrent(newMailForm);1.3.2 服務(wù)器Servlet發(fā)送(包括配置XML)程序的設(shè)計(jì)使用JavaMail的API跟SMTP郵件服務(wù)

16、器進(jìn)行交互,完成郵件的發(fā)送。1)建立dis輸入流,接收發(fā)送郵件信息“發(fā)件人”、“收件人”和“主題”和“內(nèi)容”,先判斷郵箱地址是liuyangping01還是liuyangping01,實(shí)現(xiàn)代碼如下:/建立dis輸入流(req.getInputStream()DataInputStream dis=new DataInputStream(req.getInputStream();String sendFrom=dis.readUTF();String sendTo=dis.readUTF();String subject=dis.readUTF();String content=dis.read

17、UTF();if(sendFrom.equals(liuyangping01) host=config.getInitParameter(host163);from=config.getInitParameter(from163);else if(sendFrom.equals(liuyangping01) host=config.getInitParameter(host126);from=config.getInitParameter(from126);2)創(chuàng)建Properties、Session、MimeMessage實(shí)例對(duì)象,代碼如下:/創(chuàng)建Properties實(shí)例對(duì)象Properti

18、es props=new Properties();props.put(mail.smtp.host,host);props.put(mail.smtp.auth, true); /創(chuàng)建Session實(shí)例對(duì)象Session session = Session.getDefaultInstance(props);session.setDebug(true);/創(chuàng)建MimeMessage實(shí)例對(duì)象MimeMessage message=new MimeMessage(session);3)設(shè)置郵件信息,獲取Transport對(duì)象,并根據(jù)郵箱地址連接相應(yīng)的郵件服務(wù)器發(fā)送郵件的方法如下:/設(shè)置發(fā)件人me

19、ssage.setFrom(new InternetAddress(from);/設(shè)置收件人message.addRecipient(Message.RecipientType.TO,new InternetAddress(sendTo);/設(shè)置郵件主題message.setSubject(subject);/設(shè)置郵件內(nèi)容message.setText(content);/保存最終生成的郵件信息message.saveChanges();/獲取Transport對(duì)象,并連接郵件服務(wù)器發(fā)送郵件Transport transport = session.getTransport(smtp);if(

20、sendFrom.equals(liuyangping01) transport.connect(host, liuyangping01, kv0yr48wz4rf8g70);else if(sendFrom.equals(liuyangping01) transport.connect(host, liuyangping01, kv0yr48wz4rf8g70);transport.sendMessage(message, message.getAllRecipients();transport.close();4)配置XMLweb.xml中添加四個(gè)參數(shù)(包括標(biāo)識(shí)和取值): param-na

21、me host163 param-value param-name from163 param-valueliuyangping01 param-namehost126 param-value param-name from126 param-valueliuyangping01將servlet-name和url-pattern設(shè)置為: servlet-name MailServlet url-pattern /mail將send-mailservlet放置在webapps目錄里,里面包括一個(gè)MailServlet.class文件,一個(gè)web.xml文件,還有tomcat執(zhí)行時(shí)所用到的類庫(kù)。1

22、.3.3 服務(wù)器端接收程序的設(shè)計(jì)使用JavaMail的API跟POP3郵件服務(wù)器進(jìn)行交互,完成郵件的接收。1)建立dis輸入流,接收發(fā)送郵件信息“郵箱地址”,先判斷郵箱地址是liuyangping01還是liuyangping01,可用下面代碼實(shí)現(xiàn):/建立dis輸入流(req.getInputStream()DataInputStream dis=new DataInputStream(req.getInputStream();String emailAddress=dis.readUTF();if(emailAddress.equals(liuyangping01) host=config.

23、getInitParameter(host163);username=config.getInitParameter(username163);else if(emailAddress.equals(liuyangping01) host=config.getInitParameter(host126);username=config.getInitParameter(username126);2)創(chuàng)建Properties、Session、Store實(shí)例對(duì)象的方法如下:/創(chuàng)建Properties實(shí)例對(duì)象Properties props=new Properties();props.put(ma

24、il.pop3.host, host);props.put(mail.pop3.auth, true); /創(chuàng)建Session實(shí)例對(duì)象Session session = Session.getDefaultInstance(props);session.setDebug(true);/創(chuàng)建Store實(shí)例對(duì)象,并連接郵件服務(wù)器接收郵件Store store = session.getStore(provider);3)再根據(jù)郵箱地址連接相應(yīng)的郵件服務(wù)器接收郵件,打開收件箱,取得郵件信息from、subject、content,由下面代碼實(shí)現(xiàn):if(emailAddress.equals(liuy

25、angping01) store.connect(host, liuyangping01, kv0yr48wz4rf8g70);else if(emailAddress.equals(liuyangping01) store.connect(host, liuyangping01, kv0yr48wz4rf8g70);Folder inbox = store.getFolder(INBOX);if (inbox = null)System.out.println(收件箱為空);return;inbox.open(Folder.READ_ONLY);Message message = inbox

26、.getMessages();String from = InternetAddress.toString(messagemessage.length-1.getFrom();Object subject = messagemessage.length-1.getSubject();Object content = messagemessage.length-1.getContent();4)建立dos輸出數(shù)據(jù)流,將郵件信息返回給手機(jī)端的方法如下:/建立dos輸出流(resp.getOutputStream()DataOutputStream dos = new DataOutputStrea

27、m(resp.getOutputStream();dos.writeUTF(發(fā)件人:+from+n收件人:+emailAddress+n主題:+(String)subject+n內(nèi)容:+(String)content);dos.close();5)并通過PrintWriter類、FileWriter類和StringBuffer類將郵件信息保存到本地磁盤D盤。代碼如下:/將郵件信息保存到本地磁盤D盤PrintWriter pw = null;FileWriter writer = null;File file = null;StringBuffer stringBuffer = new Stri

28、ngBuffer();stringBuffer.append(郵箱地址:+emailAddress+rn);/在WindowsXP里txt換行是rnstringBuffer.append(收件箱最近一條郵件:來(lái)自+from+的一封郵件主題為+subject+ 內(nèi)容為+content);String path = D:/emailinformation.txt;file = new File(path);writer = new FileWriter(file);pw = new PrintWriter(writer);pw.println(stringBuffer.toString();pw.

29、flush();writer.close();inbox.close(false);store.close();6)配置XMLweb.xml中添加四個(gè)參數(shù)(包括標(biāo)識(shí)和取值):param-name host163 param-value param-name username163 param-value liuyangping01 param-name host126 param-value param-name username126 param-value liuyangping01將servlet-name和url-pattern設(shè)置為:servlet-name MailServlet

30、url-pattern /mail將send-mailservlet放置在webapps目錄里,里面包括一個(gè)MailServlet.class文件,一個(gè)web.xml文件,還有tomcat執(zhí)行時(shí)所用到的類庫(kù)。2 系統(tǒng)實(shí)現(xiàn)確認(rèn)計(jì)算機(jī)連網(wǎng)后,配置好tomcat下webapps目錄,打開tomcat服務(wù)器、eclipse開發(fā)工具,用戶選擇手機(jī)端MIDlet程序即可打開歡迎界面,如下圖2-1,選擇“發(fā)信”菜單即可打開發(fā)送郵件界面,如下圖2-2 圖2-1 歡迎界面 圖2-2 發(fā)信界面如果輸入的信息不完全,將會(huì)彈出系統(tǒng)提示界面,如下圖2-3,確認(rèn)輸入的信息完全正確后,選擇“下一步”,進(jìn)入郵件內(nèi)容編輯界面,

31、如下圖2-4 圖2-3 系統(tǒng)提示界面 圖2-4 郵件內(nèi)容編輯界面郵件內(nèi)容編輯好后,點(diǎn)擊“發(fā)送”即可完成郵件的發(fā)送,系統(tǒng)回到歡迎界面,如下圖2-5選擇“收信”菜單,即可打開接收郵件界面,如下圖2-6圖2-5 歡迎界面圖2-6 收信界面如果輸入的信息不完全,將會(huì)彈出系統(tǒng)提示界面,如下圖2-7,確認(rèn)郵箱地址輸入正確后,選擇“下一步”,即可進(jìn)行郵件的接收,得到的郵件信息如下圖2-8圖2-7 系統(tǒng)提示界面 圖2-8 郵件信息界面在此期間,eclipse控制臺(tái)下的輸出信息如下圖2-9圖2-9 eclipse控制臺(tái)輸出信息發(fā)送郵件期間,tomcat輸出信息如下圖2-10,接收郵件期間,tomcat輸出信息如下圖2-1

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論