资源描述:
《用visualc++编写电子邮件程序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、用VisualC++编写电子邮件程序 一、概述 本文主要讲述如何使用VisualC++用MAPI编写E-mail程序。MAPI是包含在API,简单的MAPI CMC,monMessagingCalls,一般通讯调用 完整的MAPI SMAPI和CMC都包含在完整的MAPI中,当用户想执行一些高级操作,比如编写自己的E-mail服务器的时候,必须使用完整的MAPI。本文主要阐述如何编写能够收发电子邮件的程序,因此使用SMAPI就足够了。 二、编写电子邮件程序 3-1初始化MAPI 要使用MAPI,必须首先对它进行初始化。初始化包括以下三个步骤: 装载MAPI32.DLL
2、动态链接库 找到想要调用的MAPI函数地址 登录到电子邮件对象 3-1-1装载MAPI32.DLL 要装载MAPI,用户必须程序运行时动态的装载一个动态链接库。LoadLibrary函数提供了此功能,它定位一个动态链接库,并返回HINSTANCE局柄(需要保存该句柄)。 LoadLibrary的语法如下:LoadLibrary(lpLibFileName); 其中lpLibFileName为LPCTSTR结构变量, 是所要调用的库的路径和名称。 程序示例://调用MAPI32.DLL并计算函数地址HINSTANCEhInstMail;hInstMail=::LoadLi
3、brary(MAPI32.DLL);if(hInstMail==NULL){//错误处理//受篇幅限制,下面的错误处理部分省略} 3-1-2确定函数地址 由于MAPI32.DLL是被动态装载的,因此不知道所要调用的函数地址,也就不能一开始就调用它们,而要通过函数名获得函数的地址,并在动态链接库中查找每一个函数并核实。因此首先必须为这些函数声明指针 程序示例://为MAPI32.DLL中的函数声明函数指针ULONG(PASCAL*lpfnMAPISendMail)(LHANDLElhSession,ULONGulUIParam,lpMapiMessagelpMessage,FLAG
4、SflFlags,ULONGulReserved);ULONG(PASCAL*lpfnMAPIResolveName)(LHANDLElhSession,ULONGulUIParam,LPTSTRlpszName,FLAGSulFlags,ULONGulReserved,lpMapiRecipDescFAR*lppRecip);ULONG(FARPASCAL*lpfnMAPILogon)(ULONGulUIParam,LPSTRlpszProfileName,LPSTRlpszPass,FLAGSflFlags,ULONGulReserved);ULONG(FARPASCAL*lpfn
5、MAPIFreeBuffer)(LPVOIDlpBuffer);ULONG(FARPASCAL*lpfnMAPIAddress)(LHANDLElhSession,ULONGulUIParam,LPSTRlpszCaption,ULONGnEditFields,LPSTRlpszLabels,ULONGnRecips,lpMapiRecipDesclpRecips,FLAGSflFlags,ULONGulReserved,LPULONGlpnNe,LPSTRlpszMessageType,LPSTRlpszSeedMessageID,FLAGSflFlags,ULONGulReserv
6、ed,LPSTRlpszMessageID);ULONG(FARPASCAL*lpfnMAPIReadMail)(LHANDLElhSession,ULONGulUIParam,LPSTRlpszMessageID,FLAGSflFlags,ULONGulReserved,lpMapiMessageFAR*lppMessage); 为了决定每一个函数的地址,必须为每一个函数调用GetProcAddress。 GetProcAddress的语法为:GetProcAddress(hModule,lpProcName); 其中,hModule为HMODULE结构,是所调用DLL模块的句
7、柄; lpProcName为LPCSTR结构,是函数名称。 程序示例://找到MAPI32.DLL函数的地址,并将它们保存在函数指针变量里(FARPROC)lpfnMAPISendMail=GetProcAddress(hInstMai12345下一页....,。l,MAPISendMail);(FARPROC)lpfnMAPIResolveName=GetProcAddress(hInstMail,MAPIResolveName);(FA