基于http协议的手机邮件收发系统的设计与实现_第1页
基于http协议的手机邮件收发系统的设计与实现_第2页
基于http协议的手机邮件收发系统的设计与实现_第3页
基于http协议的手机邮件收发系统的设计与实现_第4页
基于http协议的手机邮件收发系统的设计与实现_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于http协议的手机邮件收发系统的设计与实现刘洋平 王玉龙 赵伟(合肥学院电子信息与电气工程系通信工程专业)摘要:本文介绍了基于http协议的手机邮件收发系统的开发技术及其体系结构,设计并实现了一个基于http协议的手机邮件收发系统。系统采用Servlet技术以及JavaMail技术作为中间层,解决了邮件收发的技术问题;使用了Java ME高级界面API、多线程和通用连接框架GCF等多项技术实现MIDlet客户端。关键词:http 手机邮件 Servlet JavaMail JavaME0 引言随着移动手机和智能化移动终端的实现,越来越多的用户习惯于无线移动通信方式,通过手机收发电子邮件作为

2、传统电脑收发邮件的一个补充,可以让我们更方便、快捷地获取重要信息。手机的邮件程序的开发目前存在两种方式:第一,是针对手机底层专用的API来开发,一般可有C语言来开发,这类程序的专用性很强,但不利于移植到新的机器上;第二,使用Java ME技术,利用JAVA的对设备无关性的特点,也就是说用它来开发程序,可以放在任何一台JAVA手机上,而现在几乎所有手机都支持。在使用Java ME之前,手机连接互联网采用的是WAP技术,通过WAP协议访问WAP服务器,中间涉及到协议转换,将WAP转成HTTP,存在速度慢,持续在线等缺点。J2ME解决了这个问题,即应采用基于HTTP的传输技术。目前Java ME推出

3、了MIDP2.0简表,在这个表里提供了http、socket、tcp/udp等网络连接方式,这样首先就解决和网络互联的问题。1 手机邮件收发系统设计1.1 本系统的原理客户端MIDlet向中间服务器tomcat发送请求,服务器端Servlet使用javamail的API向POP3,SMTP等邮件服务器提出要求,从而完成邮件的发送和接收功能。原理图如下图1-1: SMTP SP POP3 SPJavaMailMIDlettomcat 图1-1 系统原理图1.2 系统功能描述本系统能够完成简单的邮件编写和邮件发送、接收功能。能够从liuyangping01和liuyangping01两个邮箱向其他

4、的邮箱发送邮件,同时能够接收liuyangping01和liuyangping01两个邮箱收件箱中的最近一封邮件。1.3 各功能模块设计过程1.3.1 手机端MIDlet程序的设计手机端程序包括三个线程,一个MIDlet主线程类,一个SendThread发送线程类,一个ReceiveThread接收线程类。1)首先使用Alert屏显制作一个欢迎界面,介绍本次课程设计的基本信息,添加“发信”和“收信”两个菜单,点击“发信”菜单启动sendThread线程,显示sendForm屏显,点击“收信”菜单启动receiveThread线程,显示receiveForm屏显。这一部分的部分代码如下:Comm

5、and sendCommand = new Command(发信, Command.OK, 1);Command receiveCommand = new Command(收信, Command.OK, 2);/欢迎界面Alert splashScreen = new Alert(手机邮件收发系统, 基于http协议的手机邮件收发系统nn学生姓名:刘洋平 王玉龙 赵伟n指导教师:李祎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(发送邮件系统,this);receiveForm =new ReceiveForm(接收邮件系统,this);contentTextBox = new ContentTextBox(内容, null, 600, TextField.ANY, this);splashScreen.addCommand(sendCommand);splashScreen.addCommand(receiveCom

7、mand);splashScreen.setTicker(new Ticker(您好,欢迎使用手机邮件收发系统,请选择收信发信菜单进入下一步);splashScreen.setCommandListener(this);display.setCurrent(splashScreen);2)发送邮件界面:SendForm类继承于高级用户界面Form类,上面添加三个TextField,用来添加发送邮件信息“发件人”、“收件人”和“主题”,添加一个菜单“下一步”,当点击“下一步”时进入contentTextBox屏显,添加邮件内容。其部分代码如下:public void init()fromFiel

8、d = new TextField(发件人:, 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(系统提示,请认真填写信息,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类继承于高级用户界面Form类,上面添加一个TextField,用来添加邮箱信息“邮件地址”,添

11、加一个菜单“下一步”,当点击“下一步”时继续程序的执行。其代码如下:private TextField emailAddressField = new TextField(请输入邮件地址:, null, 30, TextField.ANY);this.append(emailAddressField);this.addCommand(MailClient.nextCommand);this.setCommandListener(this);4)发送线程:打开一个HttpConnection接口,定义一个输出流,将发送邮件信息“发件人”、“收件人”、“主题”和“内容”发送给Servlet进行处理

12、,可用如下方法实现:/打开一个接口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();定义一个输入流(注:输入流也可不定义),接收Servlet返回的信息,线程执行完毕后返回欢迎界面。5)接收线程:打开一个HttpConnection接口,定义一个输出流,将接收邮件信息“邮件地址”发送给Servlet进行处理,可用如下方法实现:/打开一个接口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();定义一个输入流,接收Servlet返回的信息,线程执行完毕后显示接收的邮件信息。实现代码如下:/定义输入流dis = new DataInputStream(httpConn.openInputStream();mai

15、lContentR = dis.readUTF();dis.close();httpConn.close();System.out.println(end of receiving mail);/实例化NewMailForm类newMailForm = new NewMailForm(邮件信息, mailClient);for(int i=0; i20000000; i+) /延时方法/显示新邮件界面mailClient.display.setCurrent(newMailForm);1.3.2 服务器Servlet发送(包括配置XML)程序的设计使用JavaMail的API跟SMTP邮件服务

16、器进行交互,完成邮件的发送。1)建立dis输入流,接收发送邮件信息“发件人”、“收件人”和“主题”和“内容”,先判断邮箱地址是liuyangping01还是liuyangping01,实现代码如下:/建立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)创建Properties、Session、MimeMessage实例对象,代码如下:/创建Properties实例对象Properti

18、es props=new Properties();props.put(mail.smtp.host,host);props.put(mail.smtp.auth, true); /创建Session实例对象Session session = Session.getDefaultInstance(props);session.setDebug(true);/创建MimeMessage实例对象MimeMessage message=new MimeMessage(session);3)设置邮件信息,获取Transport对象,并根据邮箱地址连接相应的邮件服务器发送邮件的方法如下:/设置发件人me

19、ssage.setFrom(new InternetAddress(from);/设置收件人message.addRecipient(Message.RecipientType.TO,new InternetAddress(sendTo);/设置邮件主题message.setSubject(subject);/设置邮件内容message.setText(content);/保存最终生成的邮件信息message.saveChanges();/获取Transport对象,并连接邮件服务器发送邮件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中添加四个参数(包括标识和取值): 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设置为: servlet-name MailServlet url-pattern /mail将send-mailservlet放置在webapps目录里,里面包括一个MailServlet.class文件,一个web.xml文件,还有tomcat执行时所用到的类库。1

22、.3.3 服务器端接收程序的设计使用JavaMail的API跟POP3邮件服务器进行交互,完成邮件的接收。1)建立dis输入流,接收发送邮件信息“邮箱地址”,先判断邮箱地址是liuyangping01还是liuyangping01,可用下面代码实现:/建立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)创建Properties、Session、Store实例对象的方法如下:/创建Properties实例对象Properties props=new Properties();props.put(ma

24、il.pop3.host, host);props.put(mail.pop3.auth, true); /创建Session实例对象Session session = Session.getDefaultInstance(props);session.setDebug(true);/创建Store实例对象,并连接邮件服务器接收邮件Store store = session.getStore(provider);3)再根据邮箱地址连接相应的邮件服务器接收邮件,打开收件箱,取得邮件信息from、subject、content,由下面代码实现: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输出数据流,将邮件信息返回给手机端的方法如下:/建立dos输出流(resp.getOutputStream()DataOutputStream dos = new DataOutputStrea

27、m(resp.getOutputStream();dos.writeUTF(发件人:+from+n收件人:+emailAddress+n主题:+(String)subject+n内容:+(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(收件箱最近一条邮件:来自+from+的一封邮件主题为+subject+ 内容为+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中添加四个参数(包括标识和取值):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设置为:servlet-name MailServlet

30、url-pattern /mail将send-mailservlet放置在webapps目录里,里面包括一个MailServlet.class文件,一个web.xml文件,还有tomcat执行时所用到的类库。2 系统实现确认计算机连网后,配置好tomcat下webapps目录,打开tomcat服务器、eclipse开发工具,用户选择手机端MIDlet程序即可打开欢迎界面,如下图2-1,选择“发信”菜单即可打开发送邮件界面,如下图2-2 图2-1 欢迎界面 图2-2 发信界面如果输入的信息不完全,将会弹出系统提示界面,如下图2-3,确认输入的信息完全正确后,选择“下一步”,进入邮件内容编辑界面,

31、如下图2-4 图2-3 系统提示界面 图2-4 邮件内容编辑界面邮件内容编辑好后,点击“发送”即可完成邮件的发送,系统回到欢迎界面,如下图2-5选择“收信”菜单,即可打开接收邮件界面,如下图2-6图2-5 欢迎界面图2-6 收信界面如果输入的信息不完全,将会弹出系统提示界面,如下图2-7,确认邮箱地址输入正确后,选择“下一步”,即可进行邮件的接收,得到的邮件信息如下图2-8图2-7 系统提示界面 图2-8 邮件信息界面在此期间,eclipse控制台下的输出信息如下图2-9图2-9 eclipse控制台输出信息发送邮件期间,tomcat输出信息如下图2-10,接收邮件期间,tomcat输出信息如下图2-1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论