1、pop3邮件客户端课程设计大学论文青海民族大学课程设计报告课程类别: 本科 课程名称: TCP/IP协议原理课程设计 课程代号: XXXXXX 指导教师: 昝风彪POP3邮件客户端姓名:卢国祥学号:1410030010院系:计算机学院专业:网络工程班级:14网本课程设计报告提交时间:2016 年 12月 日目 录1 课程设计内容 12 课程设计要求 12.1 功能要求 13 概要设计 13.1 功能模块图 13.2 功能模块描述 14 详细设计 24.1 功能流程图 24.2 重点设计 25 测试与调试 26 心得体会 2参考文献 2POP3邮件客户端1 课程设计内容设计并实现POP3邮件客户
2、端系统,要求能够向POP服务器发送命令,并接受POP服务器返回的响应和数据,程序设计具备以下功能模块:(1) 功能模块1要求实现的程序为图形化界面,可以输入POP服务的相关信息(包括POP服务器名、用户和密码),输出交互过程中的POP命令与响应信息,以及从POP服务器的制定邮箱中获得的邮件信息。(2) 功能模块2要求遵循RFC1939的相关POP3协议规定可以登录到任意一个标准的POP3服务器。只要求实现USER 、PASS、STAT、RETR、DELE和QUIT命令。点击链接按钮,实现USER与PASS命令;单机删除按钮,实现DELE命令;单击退出按钮,实现QUIT命令。2 课程设计要求2.
3、1 设计要求(1) 要求有良好的编程规范与详细的注释信息。(2) 要求有详细的说明文档,包括程序的设计思想、工作流程、关键问题等。(3) 要求在Windows操作系统环境中,建议使用Visual C+编程工具实现。2.2 功能要求所设计的的程序经调试后能与现有的邮件服务器系统(如:163、126、sina、sohu、QQ)等进行通信,并能查看邮件服务器上的邮件并下载到本机上。2.3 设计平台介绍VC+是微软公司开发的一个IDE(集成开发环境),换句话说就是使用C+的一个开发平台。VC+是Windows平台上的C+编程环境,学习VC要了解很多Windows平台的特性并且还要掌握MFC、ATL、C
4、OM等的知识,难度比较大,Windows下编程需要了解其消息机制以及回调(callback)函数的原理,MFC是Win32API的包装类,需要理解文档视图类的结构,窗口类的结构,消息流向等。MFC是Visual C+进行开发的一种主要模式。2.4 POP3协议POP邮局协议负责从邮件服务器中检索电子邮件。它要求邮件服务器完成下面几种任务:从邮件服务器中检索邮件并从服务器中删除这个邮件;从邮件服务器中检索邮件但不删除它;不检索邮件,只是询问是否有新邮件到达。Pop协议支持多用户互联网邮件扩展,实际上这样就可以传输任何格式的文件。Pop3协议即邮局协议的第三个版本,它规定怎样将个人计算机连接到In
5、ternet的邮件服务器和下载电子邮件的电子协议。它是Internet电子邮件的第一个离线协议标准,pop3允许用户从服务器上把邮件存储到本地主机上,同时删除保存在邮件服务器上的邮件,而pop3服务器则是遵循pop3协议的接收邮件服务器,用来接收电子邮件。2.5 实验步骤1、 新建MFC程序,选择合适的位置保存工程项目;2、 绘制MFC程序界面,熟悉所使用的控件。3、 定义控件所对应的变量。4、 编写程序的功能实现部分代码,并调试运行。5、 分析实验结果,编写课程设计文档。3 概要设计3.1 功能模块图3.2 功能模块描述1) 与现有服务器的连接2) 用户从邮件服务器上下载邮件到本地主机上4
6、详细设计4.1 功能流程图4.2 重点设计 实现步骤1. 在visual中创建一个工程2.设计基于对话框的图形界面,添加组件和按钮步骤3先在MailClientDlg.h中添加如下全局变量:#define MAX_SIZE 65535再在MailClientDlg类中添加如下私有成员:bool RecvRespond();bool SendCommanf();char CommandMAX_SIZE;char RespondMAX_SIZE;bool RespondStatue;SOCKET Socket;再按Ctrl+W进入MFC ClassWizard,选择Member Variable,
7、为控件添加成员变量,如图所示步骤4:在资源视图中选择对话框,双击“链接”按钮,为之创建响应函数OnConnect(),双击“接收”按钮,为之创建响应函数OnReceive(),双击“删除”按钮,为之创建响应函数OnDelete()。双击“退出”按钮,为之创建响应函数OnQuit().步骤5:添加相关代码。5 测试与调试5.1测试目的检查POP3邮件客户端程序是否能够与现有的邮件服务器如:163、QQ进行通信,是否从邮件服务器上下载邮件到本地主机上。5.2测试环境Win XP系统 visual C+6.0 5.3测试结果 客户端建立之后,连接国内现有的服务器系统,证明能够与主流服务器系统进行通信
8、,具体的通信界面如下图所示与服务器取得联系之后,对目标邮件进行下载接收,证明邮件可以正常下载到本地主机,具体的接收界面如下图所示。 5.4结果分析经过测试,该邮件客户端各个功能均能实现,POP3端口能与国内现有的主流服务器系统(如:163、126、sina、sohu、QQ)等进行通信,并能查看邮件服务器上的邮件并下载到本机上。此次邮件客户端设计成功。6 出现的问题及解决方法6.1设计中出现的问题1)设计初没有接触尝试过相似系统的设计;2)设计时编写程序不是很顺利;3)调试程序时出现很多错误;4)软件界面过于简洁。6.2解决方法 1)找来相关资料,经过本小组的一番讨论研究,对该邮件客户端有了较清
9、晰的认识,才开始着手于正式设计。 2)经过一段时间的研究,找到了可行的函数模式。 3)不断地耐心调试,直至出现满意的结果。 4)经过相应的修改,终于达到了较好的效果。7 心得体会7.1 总结 通过此次课程设计对现今流行的邮件系统现状有了一定的了解,针对基本的邮件服务器设计进行了分析,选择了相应的编程语言及相关的协议及技术,通过编程实现简单的邮件的收发,主要完成了以下工作:(1) 在明确邮件收发系统的概念及原理的基础上对邮件服务器模块进行整体分析,确定编程思路及大体框架;(2) 理解并应用Socket接口及网络编程技术,分析协议通信的整个过程,学会用编程语言实现其功能;(3) 对代码中存在的bu
10、g进行调试及分析,深入理解服务器与客户端之间的通信过程,及怎样利用协议来实现对话;(4) 由于所编写的邮件系统不仅只是给予发送简单的文本信息而已,而且还能够发送添加附件的邮件,所以他有很大的实用性。(5) 当然,随着网络技术的飞速发展,邮件服务器系统已经产生了很多功能非常完善的邮件客户端,本客户端只实现了一些基本功能,有些功能需要进一步完善和改进。7.2 发展需求 在邮件收发系统能给我们带来很多方便的同时,用户对它的功能需求也在不断的提高,现在通过电子油件传播的病毒很多(大多通过附件传播)。系统该应加入对附件的安全性检查功能,对SMTP,POP,IMTP,LDAP,HTTP可以支持SSL/TL
11、S加密传输,防止网络侦听,通信更安全。为了给生活带来更多的方便,邮箱应该可以和手机绑定,支持短信提醒,有新邮件到达时,可以在手机上获得通知。提供快速设置向导,只需输入几个简单参数,让您一分钟内设置好邮件系统。可以同时发送多个附件,超大附件,提供网络磁盘功能,并且可以设置共享。提供网络记事本服务。8程序清单 源代码:/ MailClientDlg.cpp : implementation file/#define MAX_SIZE 4096#include stdafx.h#include MailClient.h#include MailClientDlg.h#ifdef _DEBUG#def
12、ine new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CAboutDlg dialog used for App Aboutclass CMailClientlg : public CDialogpublic: /AFX_DATA(CMailClientlg) enum IDD = IDD_ABOUTBOX ; enmuIDD=IDD_MAILCLIENT_DIALOG; CString m_Address; CString m_Login; CString m_Mail; CString m_Passw
13、ord; CString m_Account; /AFX_DATA / ClassWizard generated virtual function overrides /AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support /AFX_VIRTprotected: /AFX_MSG(CAboutDlg) afx_msg void OnConnect(); afx_msg void OnQuit(); afx_msg void OnRecevice(
14、); adx_mag void Ondelete(); /AFX_MSG DECLARE_MESSAGE_MAP()private: bool RecvRespond(); bool SendCommand(); char CommandMAX_SIZE; char RespondMAX_SIZE; bool RespondStatue; SOCKET Socket;/MailClientDlg.cpp:imlementation file#include stdafx.h#include MailnClient.h#include MailnClientlg.h#include winsoc
15、k.hvoid CMailClientDlg:OnConnect() UpdataData(true); WSADATA WSAData; if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0) MessageBox(初始化Winsock失败!); return; Socket=socket(AF_INET,SOCK_STREAM,0);if(Socket=INVAID_SOCKET) MessageBox(创建Socket失败!); WSACleanup(); return;int IpAddress;IpAddress=inet_addr(m_Address);
16、if(IpAddress=INADDR_NONE) hostent * pHostent=gethostbyname(m_Address); if(pHostent) IpAddress(*(in_addr*)pHostent-h_addr).s_addr;sockaddr_in serveraddr;memset(&severaddr,0,sizeof(severaddr);severaddr.sin_family=AF_INET;severaddr.sin_port=htons(110);severaddr.sin_addr.s_addr=IpAddress;int nConnect;nC
17、onnect=connect(Socket,(sockaddr*)&severaddr,sizeof(severaddr);if(nConnect=SOCKET_ERROR) MessageBox(链接建立失败!); closesocket(socket); WSACleanup(); return;m_Login+=Client: Connect to;m_Login+=m_Address;m_Login+=.rn;if(!RecvRespond() return;else if(!RecvRespond() m_Login+=Sever: ; m_Login+=Respond; else
18、MessageBox(链接响应错误!); closesocket(Socket); WSACleanup(); return; memset(Command,0,MAX_SIZE);memcpy(Command,USER,strlen(USER );memcpy(Command+strlen(USER),m_Account,strlen(m_Account);memcpy(Command+strlen(USER)+strlen(m_Account),rn,2);if(!SendCommand() return;m_Login+=Client:;m_Login+=Command;if(!Recv
19、Respond() return;else if (RespondStatue=true) m_Login+=Servere:; m_Login+=Respond; else MesssageBox(USER响应错误!); closesocket(Socket); WSACleanup(); return; memset(Command,0MAX_SIZE);memcpy(Command,PASS,strlen(PASS);memcpy(Command+strlen(PASS),m_Password,strlen(m_Password);memcpy(Command+strlen(PASS)+
20、strlen(m_Password),rn,2);if(!SendCommand(); return; m_Login+=Client:PASS*rn; if(RecvRespond() return; else if(RespondStatue=true) m_Login+=Server; m_Login+=Respond; else MessageBox(PASS响应错误!); closesocket(Socket); WSACleanup(); return; UpdateData(false);void CAboutDlg:DoDataExchange(CDataExchange* p
21、DX) CDialog:DoDataExchange(pDX); /AFX_DATA_MAP(CAboutDlg) /AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog) /AFX_MSG_MAP(CAboutDlg) / No message handlers /AFX_MSG_MAPEND_MESSAGE_MAP()/ CMailClientDlg dialogCMailClientDlg:CMailClientDlg(CWnd* pParent /*=NULL*/) : CDialog(CMailClientDlg:IDD, pParent)
22、 /AFX_DATA_INIT(CMailClientDlg) m_Mail = _T(); m_address = _T(); m_Login = _T(); m_password = _T(); m_Account = _T(); /AFX_DATA_INIT / Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);void CMailClientDlg:DoDataExchange(CDataExchange*
23、 pDX) CDialog:DoDataExchange(pDX); /AFX_DATA_MAP(CMailClientDlg) DDX_Text(pDX, IDC_EDIT3, m_Mail); DDX_Text(pDX, IDC_EDIT1, m_address); DDX_Text(pDX, IDC_EDIT10, m_Login); DDX_Text(pDX, IDC_EDIT4, m_password); DDX_Text(pDX, IDC_EDIT9, m_Account); /AFX_DATA_MAPBEGIN_MESSAGE_MAP(CMailClientDlg, CDialo
24、g) /AFX_MSG_MAP(CMailClientDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_LBN_SELCHANGE(IDC_LIST4, On) ON_BN_CLICKED(IDC_BUTTON2, OnConnect) ON_BN_CLICKED(IDC_BUTTON5, OnQuit) ON_BN_CLICKED(IDC_BUTTON3, OnReceive) ON_BN_CLICKED(IDC_BUTTON4, Ondelete) /AFX_MSG_MAPEND_MESSAGE_MAP()/ CM
25、ailClientDlg message handlersBOOL CMailClientDlg:OnInitDialog() CDialog:OnInitDialog(); / Add About. menu item to system menu. / IDM_ABOUTBOX must be in the system command range. ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR); pSysMenu-AppendMenu(MF_STRIN
26、G, IDM_ABOUTBOX, strAboutMenu); / Set the icon for this dialog. The framework does this automatically / when the applications main window is not a dialog SetIcon(m_hIcon, TRUE); / Set big icon SetIcon(m_hIcon, FALSE); / Set small icon / TODO: Add extra initialization here return TRUE; / return TRUE
27、unless you set the focus to a controlvoid CMailClientDlg:OnSysCommand(UINT nID, LPARAM lParam) if (nID & 0xFFF0) = IDM_ABOUTBOX) CAboutDlg dlgAbout; dlgAbout.DoModal(); else CDialog:OnSysCommand(nID, lParam); / If you add a minimize button to your dialog, you will need the code below/ to draw the ic
28、on. For MFC applications using the document/view model,/ this is automatically done for you by the framework.void CMailClientDlg:OnPaint() if (IsIconic() CPaintDC dc(this); / device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); / Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1