7电子邮件接收程序

网络编程技术

课程设计报告

专业计算机科学与技术

信息工程学

题目:电子邮件接收程序

1.概述

随着因特网的普及,电子邮件已经成为人们日常工作、生活中必不可少的通信工具。客户端接收邮件时,POP3可以用来读取和保存接收到的邮件,允许客户端连接到服务器并下载所有的邮件到客户机上的邮箱。

这次课程设计是用java语言实现了基于POP3的邮件接收程序,要求能通过POP3邮件服务器接收邮件并查看邮件的属性及标题和内容等,能删除邮件服务器中的邮件。

2.设计原理

POP3邮件服务器通过侦听TCP端口110提供POP3服务。客户端软件读取邮件之前,需要先与服务器建立TCP连接。连接成功后,POP3服务器会向该客户端发送确认消息。然后客户端根据服务器回送的信息决定下一步的操作。在POP3协议中,规定的命令只有十几条。每条命令均由命令和参数两部分组成,而且每条命令都以回车换行结束。命令和参数之间空格隔开。POP3命令包含一个大小写无关的关键字和一个或多个参量,所有的命令以(回车换行符)作为其结束标志。关键字和参量必须是非控制符的ASCII码字符。关键字和参量之间,参量和参量之间由一个空格字符分隔开。命令部分由3至4个字母组成,参数部分最多可达40个字符长度。

POP3服务器回送的响应信息由一个状态码和一个可能跟有附加消息的字符串组成。状态码有两种:“确定”和“失败”。

客户端每次向POP3服务器发送命令后,都要等待服务器响应,并处理接受的信息,然后再接着发送下一个命令,如此反复多次,一直持续到断开连接。这个过程经历了3个状态:授权(AUTHORIZATION)状态、操作(TRANSACTION)状态和更新(UPDATE)状态。POP3交互过程中的状态转换如图1所示:

图1POP3的状态转换示意图

POP3交互模型基本原理为:POP3接收者对POP3发送者进行初始化连接,发送者对接收者发送询问指令“READY”,接收者则向发送者提交所要接收数据的要求,发送者做出回应,并发送数据。接收者则开始接收数据。发送者发送完数据后,提出断开请求,并断开连接。数据接收过程完成。POP3交互模型如图2所示:

POP3发送者初

接READY“Hello”“Mailfrom”“Rcptto”“Data”(requesttoget)OK接收数据QUIT断开连接

POP3接收者

图2POP3交互模型

3.详细设计及编码3.1过程中的三个状态

1.授权状态

客户端首先与POP3服务器建立TCP连接,服务器接收后发送一个单行的确认信息。

假设用C表示客户端(Client),S表示服务器端(Server),下面是客户端接收邮件前需要与服务器传输的信息。

(1)发送用户名

命令格式:USER

该命令将客户的用户名发送到服务器,服务器返回“OK”表示正确的用户名,“-ERR”表示错误的用户名。

(2)用户名确认成功后,需要输入密码

命令格式:PASS

该命令将客户的密码发送给服务器。服务器返回“OK”表示正确的密码,“-ERR”表示错误的密码。

2.操作状态

客户端将服务器成功确认了自己的身份后,POP3会话将进入操作状态,然后客户端就可以执行POP3命令进行相应的操作。

(1)STAT命令

命令格式:STAT

该命令从服务器中获取邮件总数和总字节数,服务器响应命令返回邮件总数和总字节数。

(2)LIST命令

命令格式:LIST

该命令从服务器中获得邮件列表和大小。服务器响应命令返回邮件列表和大小。

(3)RETR命令

命令格式:RETR命令

该命令从服务器中获得一个邮件

(4)DELE命令

命令格式:DELE

该命令告诉服务器将邮件标记为删除

3.更新状态

当客户在操作状态下发送QUIT命令后,会话进入更新状态。

QUIT命令

命令格式:QUIT

该命令关闭与服务器的连接。3.2窗体的构建:

使用MVC结构的思想构建一个窗体,其中包括两个按钮一个用于控制显示邮件的各种信息,一个用于控制删除功能,一个文本框用来输入要删除的邮件序号以及一个文本域来显示各方面的信息。

主要代码:

Example.java:publicclassExample{publicstaticvoidmain(Stringargs[]){WindowTrianglewin=newWindowTriangle();win.setTitle("邮件接收和删除程序");win.setBounds(100,100,420,260);}}WindowTriangle.java:publicclassWindowTriangleextendsJFrameimplementsActionListener{ReciveOneMailpmm;//模型JTextFieldtextA;//视图JTextAreashowArea;//视图JButtoncontrolButton1,controlButton2;//控制器

WindowTriangle(){init();setVisible(true);

}setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

voidinit(){textA=newJTextField(5);showArea=newJTextArea();controlButton1=newJButton("显示邮件");controlButton2=newJButton("确认");JPanelpNorth=newJPanel();pNorth.add(controlButton1);pNorth.add(newJLabel("需删除的序号:"));pNorth.add(textA);pNorth.add(controlButton2);controlButton1.addActionListener(this);controlButton2.addActionListener(this);//controlButton.addActionListener(newActionListener(){所有ActionListener的函数定义...})add(pNorth,BorderLayout.NORTH);add(newJScrollPane(showArea),BorderLayout.CENTER);}......3.3查看邮件信息方法以及删除功能的实现

创建一个ReciveOneMail的java类,在其中实现查看邮件的属性、标题和内容等的方法,然后在WindowTriangle的java类中创建模型,最后可以直接用这样一个对象调用这些方法。

删除功能主要是运用Flags的对象,来设置邮件的标志,当为

Flags.Flag.DELETED时,此时邮件将被删除。

主要代码:

WindowTriangle.Java:......publicvoidactionPerformed(ActionEvente){try{Stringhost="pop3.163.com";StringuserName="[email protected]";StringpassWord="123ling";Propertiesprops=newProperties();Sessionsession=Session.getDefaultInstance(props);session.setDebug(true);Storestore=session.getStore("pop3");store.connect(host,userName,passWord);//验证Folderfolder=store.getFolder("INBOX");//取得收件文件夹folder.open(Folder.READ_WRITE);if(e.getSource()==controlButton1){

showArea.append("receive..............................."+"\n");Messagemsg[]=folder.getMessages();showArea.append("邮件个数:"+msg.length+"\n");ReciveOneMailpmm=null;for(inti=0;i

showArea.append("总个数:"+countOfAll+"\n"+"已读个数:"+unReadCount+"\n"+"未读个数:"+newOfCount+"\n");JOptionPane.showMessageDialog(this,"若想删除某邮件,请

输入你要删除第几份邮件的序号","消息对话框",

JOptionPane.WARNING_MESSAGE);}elseif(e.getSource()==controlButton2){showArea.append("delete..............................."+"\n");intcountOfAll=folder.getMessageCount();//取得邮件个数inti=(int)Double.parseDouble(textA.getText().trim());if(i>countOfAll||i

}else{Messagemessage=folder.getMessage(i);message.setFlag(Flags.Flag.DELETED,true);//设置已删除状态为trueif(message.isSet(Flags.Flag.DELETED)){showArea.append("已经删除第"+i+"邮件。。。。。。。。。");JOptionPane.showMessageDialog(this,"删除成功","消息对话框",JOptionPane.WARNING_MESSAGE);}}folder.close(true);store.close();}}catch(Exceptionex){showArea.append("\n"+ex+"\n");}}JOptionPane.WARNING_MESSAGE);

4.结果及分析

第一步,运行程序,会显示整个窗体,如图:

第二步,点击显示邮件,与服务器连接,会显示邮件的标题、发送时间、发件人、收件人和正文等信息,并会跳出一个提示对话框“若想删除某邮件,请输入你要删除第几份邮件的序号”,如图:

第三步,假如你要删除某个邮件,要输入准确的序号,若输入的序号不符合要求,会跳出提示对话框“你输入有误”,反之则成功删除,并跳出提示对话框“删除成功”

,如图:

其中查看邮件的属性及标题和内容等如图所示:

5.设计小结

这次课程设计历时两个星期,是专业课程知识综合应用的实践训练基于让我了解了基于POP3协议的邮件接收的过程以及客户端与邮件服务端连接的过程,以前在上课的时候,总是心不在焉,只是大概听听。但是,这次课程设计让我有些悔恨,学习更加注重细节问题,应该好好听老师的每一句话。其次,以前对于编程工具的使用已经有些淡化,但是经过这一段上机的实践,对于编程中的不断修改,怎么去排错、查错,怎么去看每一步的运行结果,怎么去了解每个类的内容以确保程序的正确性上都有了很大程度的提高。

通过这次课程设计发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。在设计中也遇到了很多编程问题,但最后经过自己的努力和大家的帮助完成了这次课程设计。这让我明白了只要有恒心,有耐心,就可以达到自己的目标,完成任务!

最后,感谢帮助我完成课程设计的的老师和同学!

6.参考文献

[1]邓亚平著.计算机网络[M],1999.北京:北京邮电出版社.

[2]马骏著.C#网络应用编程(第2版),2010.北京:人民邮电出版社.

[3]李博轩等著.VisualC++6.0网络及Internet开发指南[M],2000.北京:清华大学出版社.

网络编程技术

课程设计报告

专业计算机科学与技术

信息工程学

题目:电子邮件接收程序

1.概述

随着因特网的普及,电子邮件已经成为人们日常工作、生活中必不可少的通信工具。客户端接收邮件时,POP3可以用来读取和保存接收到的邮件,允许客户端连接到服务器并下载所有的邮件到客户机上的邮箱。

这次课程设计是用java语言实现了基于POP3的邮件接收程序,要求能通过POP3邮件服务器接收邮件并查看邮件的属性及标题和内容等,能删除邮件服务器中的邮件。

2.设计原理

POP3邮件服务器通过侦听TCP端口110提供POP3服务。客户端软件读取邮件之前,需要先与服务器建立TCP连接。连接成功后,POP3服务器会向该客户端发送确认消息。然后客户端根据服务器回送的信息决定下一步的操作。在POP3协议中,规定的命令只有十几条。每条命令均由命令和参数两部分组成,而且每条命令都以回车换行结束。命令和参数之间空格隔开。POP3命令包含一个大小写无关的关键字和一个或多个参量,所有的命令以(回车换行符)作为其结束标志。关键字和参量必须是非控制符的ASCII码字符。关键字和参量之间,参量和参量之间由一个空格字符分隔开。命令部分由3至4个字母组成,参数部分最多可达40个字符长度。

POP3服务器回送的响应信息由一个状态码和一个可能跟有附加消息的字符串组成。状态码有两种:“确定”和“失败”。

客户端每次向POP3服务器发送命令后,都要等待服务器响应,并处理接受的信息,然后再接着发送下一个命令,如此反复多次,一直持续到断开连接。这个过程经历了3个状态:授权(AUTHORIZATION)状态、操作(TRANSACTION)状态和更新(UPDATE)状态。POP3交互过程中的状态转换如图1所示:

图1POP3的状态转换示意图

POP3交互模型基本原理为:POP3接收者对POP3发送者进行初始化连接,发送者对接收者发送询问指令“READY”,接收者则向发送者提交所要接收数据的要求,发送者做出回应,并发送数据。接收者则开始接收数据。发送者发送完数据后,提出断开请求,并断开连接。数据接收过程完成。POP3交互模型如图2所示:

POP3发送者初

接READY“Hello”“Mailfrom”“Rcptto”“Data”(requesttoget)OK接收数据QUIT断开连接

POP3接收者

图2POP3交互模型

3.详细设计及编码3.1过程中的三个状态

1.授权状态

客户端首先与POP3服务器建立TCP连接,服务器接收后发送一个单行的确认信息。

假设用C表示客户端(Client),S表示服务器端(Server),下面是客户端接收邮件前需要与服务器传输的信息。

(1)发送用户名

命令格式:USER

该命令将客户的用户名发送到服务器,服务器返回“OK”表示正确的用户名,“-ERR”表示错误的用户名。

(2)用户名确认成功后,需要输入密码

命令格式:PASS

该命令将客户的密码发送给服务器。服务器返回“OK”表示正确的密码,“-ERR”表示错误的密码。

2.操作状态

客户端将服务器成功确认了自己的身份后,POP3会话将进入操作状态,然后客户端就可以执行POP3命令进行相应的操作。

(1)STAT命令

命令格式:STAT

该命令从服务器中获取邮件总数和总字节数,服务器响应命令返回邮件总数和总字节数。

(2)LIST命令

命令格式:LIST

该命令从服务器中获得邮件列表和大小。服务器响应命令返回邮件列表和大小。

(3)RETR命令

命令格式:RETR命令

该命令从服务器中获得一个邮件

(4)DELE命令

命令格式:DELE

该命令告诉服务器将邮件标记为删除

3.更新状态

当客户在操作状态下发送QUIT命令后,会话进入更新状态。

QUIT命令

命令格式:QUIT

该命令关闭与服务器的连接。3.2窗体的构建:

使用MVC结构的思想构建一个窗体,其中包括两个按钮一个用于控制显示邮件的各种信息,一个用于控制删除功能,一个文本框用来输入要删除的邮件序号以及一个文本域来显示各方面的信息。

主要代码:

Example.java:publicclassExample{publicstaticvoidmain(Stringargs[]){WindowTrianglewin=newWindowTriangle();win.setTitle("邮件接收和删除程序");win.setBounds(100,100,420,260);}}WindowTriangle.java:publicclassWindowTriangleextendsJFrameimplementsActionListener{ReciveOneMailpmm;//模型JTextFieldtextA;//视图JTextAreashowArea;//视图JButtoncontrolButton1,controlButton2;//控制器

WindowTriangle(){init();setVisible(true);

}setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

voidinit(){textA=newJTextField(5);showArea=newJTextArea();controlButton1=newJButton("显示邮件");controlButton2=newJButton("确认");JPanelpNorth=newJPanel();pNorth.add(controlButton1);pNorth.add(newJLabel("需删除的序号:"));pNorth.add(textA);pNorth.add(controlButton2);controlButton1.addActionListener(this);controlButton2.addActionListener(this);//controlButton.addActionListener(newActionListener(){所有ActionListener的函数定义...})add(pNorth,BorderLayout.NORTH);add(newJScrollPane(showArea),BorderLayout.CENTER);}......3.3查看邮件信息方法以及删除功能的实现

创建一个ReciveOneMail的java类,在其中实现查看邮件的属性、标题和内容等的方法,然后在WindowTriangle的java类中创建模型,最后可以直接用这样一个对象调用这些方法。

删除功能主要是运用Flags的对象,来设置邮件的标志,当为

Flags.Flag.DELETED时,此时邮件将被删除。

主要代码:

WindowTriangle.Java:......publicvoidactionPerformed(ActionEvente){try{Stringhost="pop3.163.com";StringuserName="[email protected]";StringpassWord="123ling";Propertiesprops=newProperties();Sessionsession=Session.getDefaultInstance(props);session.setDebug(true);Storestore=session.getStore("pop3");store.connect(host,userName,passWord);//验证Folderfolder=store.getFolder("INBOX");//取得收件文件夹folder.open(Folder.READ_WRITE);if(e.getSource()==controlButton1){

showArea.append("receive..............................."+"\n");Messagemsg[]=folder.getMessages();showArea.append("邮件个数:"+msg.length+"\n");ReciveOneMailpmm=null;for(inti=0;i

showArea.append("总个数:"+countOfAll+"\n"+"已读个数:"+unReadCount+"\n"+"未读个数:"+newOfCount+"\n");JOptionPane.showMessageDialog(this,"若想删除某邮件,请

输入你要删除第几份邮件的序号","消息对话框",

JOptionPane.WARNING_MESSAGE);}elseif(e.getSource()==controlButton2){showArea.append("delete..............................."+"\n");intcountOfAll=folder.getMessageCount();//取得邮件个数inti=(int)Double.parseDouble(textA.getText().trim());if(i>countOfAll||i

}else{Messagemessage=folder.getMessage(i);message.setFlag(Flags.Flag.DELETED,true);//设置已删除状态为trueif(message.isSet(Flags.Flag.DELETED)){showArea.append("已经删除第"+i+"邮件。。。。。。。。。");JOptionPane.showMessageDialog(this,"删除成功","消息对话框",JOptionPane.WARNING_MESSAGE);}}folder.close(true);store.close();}}catch(Exceptionex){showArea.append("\n"+ex+"\n");}}JOptionPane.WARNING_MESSAGE);

4.结果及分析

第一步,运行程序,会显示整个窗体,如图:

第二步,点击显示邮件,与服务器连接,会显示邮件的标题、发送时间、发件人、收件人和正文等信息,并会跳出一个提示对话框“若想删除某邮件,请输入你要删除第几份邮件的序号”,如图:

第三步,假如你要删除某个邮件,要输入准确的序号,若输入的序号不符合要求,会跳出提示对话框“你输入有误”,反之则成功删除,并跳出提示对话框“删除成功”

,如图:

其中查看邮件的属性及标题和内容等如图所示:

5.设计小结

这次课程设计历时两个星期,是专业课程知识综合应用的实践训练基于让我了解了基于POP3协议的邮件接收的过程以及客户端与邮件服务端连接的过程,以前在上课的时候,总是心不在焉,只是大概听听。但是,这次课程设计让我有些悔恨,学习更加注重细节问题,应该好好听老师的每一句话。其次,以前对于编程工具的使用已经有些淡化,但是经过这一段上机的实践,对于编程中的不断修改,怎么去排错、查错,怎么去看每一步的运行结果,怎么去了解每个类的内容以确保程序的正确性上都有了很大程度的提高。

通过这次课程设计发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。在设计中也遇到了很多编程问题,但最后经过自己的努力和大家的帮助完成了这次课程设计。这让我明白了只要有恒心,有耐心,就可以达到自己的目标,完成任务!

最后,感谢帮助我完成课程设计的的老师和同学!

6.参考文献

[1]邓亚平著.计算机网络[M],1999.北京:北京邮电出版社.

[2]马骏著.C#网络应用编程(第2版),2010.北京:人民邮电出版社.

[3]李博轩等著.VisualC++6.0网络及Internet开发指南[M],2000.北京:清华大学出版社.


相关内容

  • 电子邮件发送和接收程序的开发 精品
  • VC++程序设计报告 电子邮件发送和接收程序 的开发 班 级: B电子051 姓 名: 学 号: 指导老师: 日 期: 2007年7月 目 录 第一章 需求分析 ............................................. 2 1.1开发背景.............. ...

  • 保险柜密码锁的结构和工作原理
  • 文章由 天猫商城 友情提供 保险柜密码锁的结构和工作原理  多拨式 最简单的密码锁,常见於低安全设定的单车锁,使用多个拨圈.每个圈的中间有凹位.锁的中心的一条轴,上有数个凸出的齿,用来卡住拨圈.当拨圈转到正确的密码组合,锁便可以打开.这种锁是最容易打开的.很多这类锁根本无需知道密码都能开启.除非它 ...

  • 电子邮件接收程序(3)
  • C#网络应用编程 课程设计报告 专业 计算机科学与技术 王世玮 B计算机112 1110704219 胡波 2013年7月5日 学生姓名 班学级 号 指导教师 完成日期 题目:邮件接收程序实现 1. 概述 POP3(Post Office Protocol Version 3),即邮局办公协议,该协 ...

  • 电子邮件系统的设计与开发
  • 山东农业大学 毕业论文 题目: 二○○八年六月 中英文摘要 第一章 电子邮件的发展背景和意义 电子邮件翻译自英文的E-mail ,它表示通过电子通讯系统进行信件的书写.发送和接收. 30多年前,人们发明了电子邮件这种便捷的信息传递方式,这是人类通信历史上的一次革命. 电子邮件的兴起是在20世纪80年 ...

  • 电子邮件SMTP_POP3收发协议的研究与实现
  • 第28卷 第8期信 息 技 术VOL.28 NO.8 2004年8月INFORMATIONTECHNOLOGYAug.2004 电子邮件SMTP/POP3收发协议的研究与实现 付祝财1,杨莘元2,王 阳3 (1.黑龙江省通信传输局,哈尔滨150006;2.哈尔滨工程大学信息与通信工程学院,哈尔滨15 ...

  • 无线遥控LED电子显示屏
  • 第二+一届中国(天津)'2007lT.网络.信息技术.电子.仪器仪表创新学术会议 无线遥控L印电子显示屏 郭萌 (天津市中环系统工程有限责任公司项目三部300060022-23350446) 摘要:提出了通过无线遥控LED显示屏的新方案,讨论了高稳定性无线数字通信的系统方案,分析了图像点 阵抽取和移 ...

  • 重点红外线防盗报警器的设计_[主动式]
  • 对射式红外线防盗报警器的设计 摘 要 本系统是基于AT89S52单片机控制的红外线防盗报警器,主要由红外线发射部分.红外线接收部分.单片机以及声光报警部分组成.可通过发射电路发射的红外线被遮挡时控制报警系统报警, 通过单片机控制报警电路的运行,并能同时进行声光报警,用红外线收发管进行检测,安装隐蔽, ...

  • 测量学自学教程12
  • 第十二章 测量新仪器和新技术简介 一.本章重点 1.了解测量新仪器的构造特点和技术操纵方法. 2.了解测量新技术的应用情况. 二.本章难点 测量新仪器的设计思路与应用技术. 三.课时分配 本章讲授2-4学时. 第一节 电子水准仪 一.构造与工作原理 电子水准仪是一种自动化程度很高的智能水准仪器,如图 ...

  • 超声波测距仪软件设计
  • 摘 要 由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,被广泛的用于距离的测量,如测距仪和物位测量仪等都可以通过超声波来实现.利用超声波检测往往比较迅速.快捷.方便简单.易于做到实时控制.是一种非接触式的检测方式,与其他方法相比不受光线,被测对象颜色的影响,对于被物体处于黑暗.有灰尘.烟雾 ...