pop3Word文档格式.docx

上传人:b****5 文档编号:19870604 上传时间:2023-01-11 格式:DOCX 页数:21 大小:29.78KB
下载 相关 举报
pop3Word文档格式.docx_第1页
第1页 / 共21页
pop3Word文档格式.docx_第2页
第2页 / 共21页
pop3Word文档格式.docx_第3页
第3页 / 共21页
pop3Word文档格式.docx_第4页
第4页 / 共21页
pop3Word文档格式.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

pop3Word文档格式.docx

《pop3Word文档格式.docx》由会员分享,可在线阅读,更多相关《pop3Word文档格式.docx(21页珍藏版)》请在冰豆网上搜索。

pop3Word文档格式.docx

//存储信件的文本

intmsgSize;

//信件的大小

intretrSize;

//信件实际下载的大小,在下载过程中动态变化

}MESSAGEPROP;

然后为套接字类定义了一个向量型的成员变量,相当于一个数组,其成员是上述的结构。

vector<

MESSAGEPROP>

msgs;

在pop会话中,一次性地将信箱中所有信件的信息转入这个向量,然后可以查阅,存储到文件中,或者进行其他处理。

10.6.2创建应用程序的过程

1.使用MFCAppWizard创建应用程序框架

工程名是pop3,应用程序的类型是基于对话框的,对话框的标题是“接收电子邮件客户端程序”,需要WindowsSockets的支持,其它部分接受系统的默认设置就可以。

向导自动为应用程序创建了两个类:

应用程序类:

CPop3App,基类是CWinApp,对应的文件是pop3.h和pop3.cpp。

对话框类:

CPop3Dlg,基类是CDialog,对应的文件是pop3Dlg.h和pop3Dlg.cpp。

2.为对话框添加控件

在程序的主对话框界面中按照图10-9添加相应的可视控件对象,并按照表10-10修改控件的属性。

表10-10对话框中的控件属性

控件类型

控件ID

Caption

静态文本statictext

IDC_STATIC

pop3服务器地址

用户名

口令

编辑框editbox

IDC_EDIT_SERVER

IDC_EDIT_USER

IDC_EDIT_PASS

复选框CheckBox

IDC_CHECK_DEL

删除邮箱中的邮件

多文本框RichEditBox

IDC_RICH_INFO

组合选择框ComboBox

IDC_COMB_LIST

(DropList型)

命令按钮button

IDC_BTN_CONN

连接

IDC_BTN_DISC

断开

IDCANCAL

取消

IDC_BTN_VIEW

查看邮件

IDC_BTN_SAVE

存储

3.定义控件的成员变量

按照表10-11,用类向导(ClassWizard)为对话框中的控件对象定义相应的成员变量。

表10-11控件对象的成员变量

ControlIDs

变量名称

MemberVariableName

变量类别

Category

变量类型

VariableType

m_strServer

Value

CString

m_strUser

m_strPass

m_bolDel

BOOL

m_ctrList

Control

CComboBox

m_Info

m_ctrlnfo

CRichEditCtrl

4.为对话框中的控件对象添加事件响应函数

按照表10-12,用类向导(ClassWizard)为对话框中的控件对象添加事件响应函数。

表10-12对话框控件的事件响应函数

对象标识ObjectID

消息Message

函数Memberfunctions

命令按钮

BN_CLICKED

OnBtnConn

OnBtnDisc

OnBtnView

OnBtnSave

5.为Cpop3Dlg类添加其它的成员

voidDisp(LONGflag);

//在不同的会话阶段显示不同的信息

mySockpop3Socket;

//套接字类对象实例

6.创建从CAsyncSocket类继承的派生类

为了能够捕获并响应socket事件,应创建用户自己的套接字类,可利用类向导添加。

ClassType选择MFCClass,类名为mySock,基类是CAsyncSocket类,创建后对应的文件是mysock.h和mysock.cpp。

在利用类向导为mysock类添加OnConnect,OnClose和OnReceive三个事件处理函数,并为它添加一般的成员函数和变量。

可参看下一小节的程序代码。

7.手工添加包含语句以及事件函数和成员函数的代码

8.分阶段编译执行,进行测试

10.6.3程序清单

1.CPop3App应用程序类对应的文件

pop3.h不动,在pop3.cpp的InitInstance()函数中添加一句初始化多文本框控件的函数。

BOOLCPop3App:

InitInstance()

if(!

AfxSocketInit())

AfxMessageBox(IDP_SOCKETS_INIT_FAILED);

returnFALSE;

}

AfxEnableControlContainer();

//MFC自动创建的代码

AfxInitRichEdit();

//用户添加的

...............

2.CPop3Dlg对话框类对应的文件

(1)pop3Dlg.h包含文件

.........

#include"

mySock.h"

//添加套接字类的包含文件

classCPop3Dlg:

publicCDialog

//Construction

public:

CPop3Dlg(CWnd*pParent=NULL);

//standardconstructor

...........

(2)pop3Dlg.cpp实现文件

stdafx.h"

pop3.h"

pop3Dlg.h"

//手工添加的包含语句

...................

BOOLCPop3Dlg:

OnInitDialog()

.............

//TODO:

Addextrainitializationhere

//用户在这里添加控件成员变量的初始化代码

m_strServer=_T("

"

);

//POP3服务器地址

m_strUser=_T("

example"

//邮箱的用户名

m_strPass=_T("

123456"

//口令

m_bolDel=FALSE;

//下载邮件后不删除

m_Info=_T("

//多文本框清空

returnTRUE;

//returnTRUEunlessyousetthefocustoacontrol

.................

//以下是事件处理函数和其他成员函数的代码

//当用户点击"

连接"

按钮时,执行此函数

voidCPop3Dlg:

OnBtnConn()

//设定pop3类的对话框指针变量,使之指向本对话框,以便传递信息

pop3Socket.SetParent(this);

UpdateData(TRUE);

//取来用户在对话框中输入的数据

pop3Socket.Create();

//创建套接字对象的底层套接字

pop3Socket.Connect((LPCSTR)m_strServer,110);

//连接pop3服务器

m_Info="

;

//多文本列表框清空

UpdateData(FALSE);

//更新用户界面

断开"

OnBtnDisc()

pop3Socket.Close();

查看邮件"

OnBtnView()

inti;

i=m_ctrList.GetCurSel();

//获得用户在组合框中的选择

//获得并显示指定信件的基本属性及信件内容

m_Info+=pop3Socket.GetMsgStuff(i);

m_Info+=pop3Socket.GetMsgBody(i);

//在不同的情况下,向用户显示不同的信息

Disp(LONGflag)

CStrings;

switch(flag)

caseS_CONNECT:

//已连接到服务器,显示信息

s="

已连接到"

+m_strServer+"

...\r\n"

m_Info+=s;

//禁用连接按钮

GetDlgItem(IDC_BTN_CONN)->

EnableWindow(FALSE);

//启用断开按钮

GetDlgItem(IDC_BTN_DISC)->

EnableWindow(TRUE);

//禁用查看邮件按钮

GetDlgItem(IDC_BTN_VIEW)->

break;

caseS_RECEIVE:

//收到服务器发来的响应,显示它的内容

m_Info+=pop3Socket.lastMsg;

caseS_CLOSE:

//显示关闭连接的信息

m_Info+=pop3Socket.error;

连接已经关闭\r\n"

//启用连接按钮

//禁用断开按钮

caseS_GETNUM:

//已经知道了邮箱中信件的总数

s.Format("

邮箱中共有%d封信\r\n"

pop3Socket.numMsg);

caseS_GETSIZE:

//显示信件的大小

信箱中信件大小为:

%d字节\r\n"

pop3Socket.sizeMsg);

caseS_ENDRETR:

//所有信件已下载完毕,显示信息

共下载了%d封信件\r\n"

pop3Socket.msgs.size());

//如果有信件下载,启用查看邮件按钮

if((pop3Socket.msgs.size())>

0)

//当点击“存储”按钮时,执行此函数。

OnBtnSave()

//获得指定信件的基本属性及信件内容

s=pop3Socket.GetMsgStuff(i);

s+=pop3Socket.GetMsgBody(i);

CFileDialogdlg(FALSE);

if(dlg.DoModal()==IDOK)

CFilefile(dlg.GetPathName(),

CFile:

modeCreate|CFile:

modeWrite|CFile:

typeBinary);

file.Write((LPCSTR)s,s.GetLength());

file.Close();

3.mySock套接字类对应的文件

(1)mysock.h包含文件

............

#include<

vector>

strstream>

string>

usingnamespacestd;

classCPop3Dlg;

//显示不同信息的标志

#defineS_CLOSE1//当关闭连接时,显示关闭信息

#defineS_CONNECT2//当连接成功时,显示连接信息

#defineS_RECEIVE3//当收到服务器发来的信息时,显示该信息

#defineS_GETNUM4//当所有信件下载完毕后,显示信箱中的信件总数

#defineS_GETSIZE5//当所有信件下载完毕后,显示信箱中的信件总大小

#defineS_ENDRETR6//当所有信件下载完毕后,显示相关信息

//描述pop3会话状态的枚举类型

//用来缓存一封信件信息的结构

//自己的套接字类

classmySock:

publicCAsyncSocket

//Attributes

CStringlastMsg;

CStringerror;

intnumMsg,sizeMsg,retrMsg;

//盛放信件信息的向量

//Operations

//获得基本的邮件信头字段:

From,To,Date,Subject,Body

CStringGetMsgStuff(inti);

CStringGetMsgBody(inti);

//获得信件体

CStringGetMsgSubject(inti);

//获得信件标题

CStringGetMsg(inti);

//获得整封信的内容

voidClose();

//退出服务器

voidSetParent(CPop3Dlg*pDlg);

mySock();

virtual~mySock();

//Overrides

//ClassWizardgeneratedvirtualfunctionoverrides

//{{AFX_VIRTUAL(mySock)

virtualvoidOnConnect(intnErrorCode);

virtualvoidOnClose(intnErrorCode);

virtualvoidOnReceive(intnErrorCode);

//}}AFX_VIRTUAL

//Generatedmessagemapfunctions

//{{AFX_MSG(mySock)

//NOTE-theClassWizardwilladdandremovememberfunctionshere.

//}}AFX_MSG

//Implementation

protected:

private:

voidReadLn(intindex,CStringsrc,CString&

dst);

voidAnalyzeMsg();

CPop3Dlg*m_pDlg;

intdelMsg;

};

..............

(2)mysock.cpp实现文件

//自己添加的包含语句

................

#defineMAX_BUFF20000

//构造函数,对某些成员变量初始化

mySock:

mySock()

m_pDlg=NULL;

state=FIRST;

error="

Notconnectedtoserver\r\n"

~mySock()

//如果连接成功,执行此函数。

//接到此消息仅仅显示了一句话,开关了一些按钮连接成功后,服务器发来响应,因此

//又立即收到了OnReceive消息,后来的会话过程中,一来一往,程序总是收到

//OnReceive消息,所以真正的事情在那里作。

voidmySock:

OnConnect(intnErrorCode)

if(nErrorCode==0)m_pDlg->

Disp(S_CONNECT);

//服务器端关闭连接,才会收到此消息。

OnClose(intnErrorCode)

Disp(S_CLOSE);

//套接字收到服务器发来的数据时,执行此函数

OnReceive(intnErrorCode)

if(nErrorCode==0)

charbuff[MAX_BUFF];

//接收缓冲区

intrec=Receive(buff,MAX_BUFF);

//接收服务器发来的数据

buff[rec]=NULL;

//结尾置为NULL。

lastMsg=buff;

AnalyzeMsg();

//分析收到的数据,作不同的处理

}else{

在接收数据时发送了错误!

\r\n"

m_pDlg->

//显示信息

//设置套接字类的对话框指针变量

SetParent(CPop3Dlg*pDlg)

m_pDlg=pDlg;

//获得第i封信件的标题信息

CStringmySock:

GetMsgStuff(inti)

CStringret;

intwhere=msgs[i].text.Find("

From:

ReadLn(where,msgs[i].text,ret);

ret+="

where=msgs[i].text.Find("

To:

if(where!

=-1)

Date:

ret+=GetMsgSubject(i);

returnret;

//获得第i封信件的信件体

GetMsgBody(inti)

\r\n\r\n"

if(where!

=-1)where+

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学案例设计

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1