电子邮件接收程序文档格式.docx
- 文档编号:19546442
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:11
- 大小:207.07KB
电子邮件接收程序文档格式.docx
《电子邮件接收程序文档格式.docx》由会员分享,可在线阅读,更多相关《电子邮件接收程序文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
关键字和参量之间,参量和参量之间由一个空格字符分隔开。
命令部分由3至4个字母组成,参数部分最多可达40个字符长度。
POP3服务器回送的响应信息由一个状态码和一个可能跟有附加消息的字符串组成。
状态码有两种:
“确定”和“失败”。
客户端每次向POP3服务器发送命令后,都要等待服务器响应,并处理接受的信息,然后再接着发送下一个命令,如此反复多次,一直持续到断开连接。
这个过程经历了3个状态:
授权(AUTHORIZATION)状态、操作(TRANSACTION)状态和更新(UPDATE)状态。
POP3交互过程中的状态转换如图1所示:
图1POP3的状态转换示意图
POP3交互模型基本原理为:
POP3接收者对POP3发送者进行初始化连接,发送者对接收者发送询问指令“READY”,接收者则向发送者提交所要接收数据的要求,发送者做出回应,并发送数据。
接收者则开始接收数据。
发送者发送完数据后,提出断开请求,并断开连接。
数据接收过程完成。
POP3交互模型如图2所示:
图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="
;
StringuserName="
gotogop@"
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();
邮件个数:
+msg.length+"
ReciveOneMailpmm=null;
for(inti=0;
i<
msg.length;
i++){
Messagemessage=msg[i];
Addressaddress[]=message.getFrom();
======================"
pmm=newReciveOneMail((MimeMessage)msg[i]);
Message"
+i+"
主题:
"
+pmm.getSubject()+"
+
是否回复:
+pmm.getReplySign()+"
是否已读:
+pmm.isNew()+"
form:
+pmm.getFrom()+"
to:
+pmm.getMailAddress("
to"
)+"
pmm.setDateFormat("
yy年MM月dd日HH:
mm"
发送日期:
+pmm.getSentDate()+"
//获得邮件内容===============
pmm.getMailContent((Part)msg[i]);
正文:
\r\n"
+pmm.getBodyText()+"
pmm.saveAttachMent((Part)msg[i]);
intcountOfAll=folder.getMessageCount();
//取得邮件个数
intunReadCount=folder.getUnreadMessageCount();
//已读个数
intnewOfCount=folder.getNewMessageCount();
//未读个数
总个数:
+countOfAll+"
+
已读个数:
+unReadCount+"
未读个数:
+newOfCount+"
JOptionPane.showMessageDialog(this,"
若想删除某邮件,请输入你要删除第几份邮件的序号"
"
消息对话框"
JOptionPane.WARNING_MESSAGE);
}elseif(e.getSource()==controlButton2){
showArea.append("
delete..............................."
+"
inti=(int)Double.parseDouble(textA.getText().trim());
if(i>
countOfAll||i<
0){
你输入有误!
}else{
Messagemessage=folder.getMessage(i);
message.setFlag(Flags.Flag.DELETED,true);
//设置已删除状态为true
if(message.isSet(Flags.Flag.DELETED)){
已经删除第"
邮件。
。
删除成功"
folder.close(true);
store.close();
}
}catch(Exceptionex){
+ex+"
4.结果及分析
第一步,运行程序,会显示整个窗体,如图:
第二步,点击显示邮件,与服务器连接,会显示邮件的标题、发送时间、发件人、收件人和正文等信息,并会跳出一个提示对话框“若想删除某邮件,请输入你要删除第几份邮件的序号”,如图:
第三步,假如你要删除某个邮件,要输入准确的序号,若输入的序号不符合要求,会跳出提示对话框“你输入有误”,反之则成功删除,并跳出提示对话框“删除成功”,如图:
其中查看邮件的属性及标题和内容等如图所示:
5.设计小结
这次课程设计历时两个星期,是专业课程知识综合应用的实践训练基于让我了解了基于POP3协议的邮件接收的过程以及客户端与邮件服务端连接的过程,以前在上课的时候,总是心不在焉,只是大概听听。
但是,这次课程设计让我有些悔恨,学习更加注重细节问题,应该好好听老师的每一句话。
其次,以前对于编程工具的使用已经有些淡化,但是经过这一段上机的实践,对于编程中的不断修改,怎么去排错、查错,怎么去看每一步的运行结果,怎么去了解每个类的内容以确保程序的正确性上都有了很大程度的提高。
通过这次课程设计发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
在设计中也遇到了很多编程问题,但最后经过自己的努力和大家的帮助完成了这次课程设计。
这让我明白了只要有恒心,有耐心,就可以达到自己的目标,完成任务!
最后,感谢帮助我完成课程设计的的老师和同学!
6.参考文献
[1]邓亚平著.计算机网络[M],1999.北京:
北京邮电出版社.
[2]马骏著.C#网络应用编程(第2版),2010.北京:
人民邮电出版社.
[3]李博轩等著.VisualC++6.0网络及Internet开发指南[M],2000.北京:
清华大学出版社.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子邮件 接收 程序