- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
POP3客户端
实验目的
操作系统,windows xp home edition版本
Vc++ 6.0编译器
接入互联网
实验目的
理解POP3协议原理,对邮件接收信息内容进行分析,熟悉SOCKET编程,来实现POP3客户端。
实验内容
实现一个简单的POP3客户端。
连接POP3服务器.
实现命令:USER,PASS,STAT,LIST,RETR,DELE,QUIT。
3.接收邮箱所有邮件
4.邮件进行分析,解析出:主题,发件人,发件时间,发件内容。
5.对个部分内容进行传输编码的解码,根据传输编码,进行base64解码或Quoted-Printable的解码
6.进行编码转换,将邮件原编码UTF8,GBK或7bit等转换为GBK,可以正确在本机上显示
程序运行
在实验的时候,对和进行了测试,以下是对服务器,用户pop3client,密码123456的演示(通过选取下拉框中的主题切换邮件)
登录界面:
显示界面:
点击删除按钮:
程序实现
程序结构
base64_dequoted.h :存放对base64和quoted的解码函数
1.int DecodeQuoted(const char* pSrc, unsigned char* pDst, int nSrcLen)//对quoted传输编码进行解码
2.void Decode(const char *szCoded, BYTE *pOut) //对base64传输编码进行解码
StructInfo.h: 根据邮件的格式,设计的一个结构体
struct MailInfo
{
CString m_Subject; //邮件的主题
CString s_Time; //邮件发送时间
CString s_Person; //邮件的发送人
CString m_Contex; //邮件的内容
CString m_Code; //邮件的编码
};
PopClient.cpp: 存放对pop3的命令操作:USER,PASS,STAT,LIST,RETR,DELE,QUIT
bool ConToServer(const char* sName) //连接pop3服务器,sName为pop3服务器名字或者ip;
bool LoginToServer(const char *uName,const char *uPass) //登陆POP3服务器,用户名为uName,用户密码为uName;
bool RecvFromServer(vectorMailInfo m_Info) //从POP3服务器获取邮件信息,将信息存储在容器m_Info中;
bool DeleteFromServer(int index) //从POP3服务器删除某个邮件,index指定删除邮件的标示号
bool QuitFromServer() //从pop3服务器退出
int RecvData(void *pData, int nLen) //接收nLen长度的流,在接收大数据量邮件的时候,需要循环读取流
void StringToStruct(const char * msgBuf,MailInfo mailInfo) //将获取的邮件字符串流,转换到对应的结构体mailInfo中,便于以后显示和操作
int GetContent(char *destStr,CString dStr,CString code) //获取邮件正文进行传输编码解码,并将编码转换为GBK,存储在dStr中,code为正文的编码
int GetGBKSubject(char *destStr,CString dStr) //将destStr进行qp或base64解码后,转换为GBK,存储于dStr中
int GetAdress(char *destStr,CString dStr) //找出邮箱的地址,为之间的内容,或者直接为“From:”后面的值,存储于dStr中
LoginDlg.cpp: 用于登录对话框,接收用户输入的pop3服务器地址,用户名和密码,调用PopClient.cpp中的函数连接服务器,登录服务器
PClientDlg.cpp:用于显示邮件的主题,时间,发件人,内容等信息的对话框,还可以进行删除操作和退出操作。
连接服务器
采用流方式tcp创建socket,可以根据服务器名(如)或者服务器IP(如sina的pop3的ip: 42),服务器端口号110; 服务器返回"+OK …"表示成功;
/*采用tcp传输*/
pClient = socket(AF_INET,SOCK_STREAM,0);
/*设置POP
文档评论(0)