VC++编写电子邮件程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VC++编写电子邮件程序

时间:2008-08-27作者:佚名编辑:本站点击:635 [评论]

VC++编写电子邮件程序

一、概述

---- 本文主要讲述如何使用Visual C++用MAPI编写E-mail程序。MAPI是包含在Windows 之中的,

因此不需要安装其他额外的部件。MAPI有以下三种形式:

SMAPI,Simple MAPI,简单的MAPI

CMC,Common Messaging Calls,一般通讯调用

完整的MAPI

---- SMAPI和CMC都包含在完整的MAPI中,当用户想执行一些高级操作,比如编写自己的E-mail服务器的时候,

必须使用完整的MAPI。本文主要阐述如何编写能够收发电子邮件的程序,因此使用SMAPI 就足够了。

二、编写电子邮件程序

3-1 初始化MAPI

---- 要使用MAPI,必须首先对它进行初始化。初始化包括以下三个步骤:

装载MAPI32.DLL动态链接库

找到想要调用的MAPI函数地址

登录到电子邮件对象

3-1-1 装载MAPI32.DLL

---- 要装载MAPI,用户必须程序运行时动态的装载一个动态链接库。LoadLibrary函数提供了此功能,

它定位一个动态链接库,并返回HINSTANCE局柄(需要保存该句柄)。

LoadLibrary的语法如下:

LoadLibrary ( lpLibFileName );

其中lpLibFileName为LPCTSTR结构变量,

是所要调用的库的路径和名称。

程序示例:

// 调用MAPI32.DLL并计算函数地址

HINSTANCE hInstMail;

hInstMail = ::LoadLibrary ( “MAPI32.DLL” );

if ( hInstMail == NULL )

{

// 错误处理

// 受篇幅限制,下面的错误处理部分省略

}

3-1-2 确定函数地址

---- 由于MAPI32.DLL是被动态装载的,因此不知道所要调用的函数地址,也就不能一开始就调用它们,

而要通过函数名获得函数的地址,并在动态链接库中查找每一个函数并核实。因此首先必须为这些函数声明指针

程序示例:

// 为MAPI32.DLL中的函数声明函数指针

ULONG (PASCAL *lpfnMAPISendMail) (LHANDLE lhSession,

ULONG ulUIParam, lpMapiMessage lpMessage,

FLAGS flFlags, ULONG ulReserved);

ULONG (PASCAL *lpfnMAPIResolveName) (LHANDLE lhSession,

ULONG ulUIParam, LPTSTR lpszName,

FLAGS ulFlags, ULONG ulReserved,

lpMapiRecipDesc FAR *lppRecip);

ULONG (FAR PASCAL *lpfnMAPILogon)(ULONG ulUIParam,

LPSTR lpszProfileName, LPSTR lpszPassword,

FLAGS flFlags, ULONG ulReserved,

LPLHANDLE lplhSession);

ULONG (FAR PASCAL *lpfnMAPILogoff)(LHANDLE lhSession,

ULONG ulUIParam, FLAGS flFlags,

ULONG ulReserved);

ULONG (FAR PASCAL *lpfnMAPIFreeBuffer)(LPVOID lpBuffer);

ULONG (FAR PASCAL *lpfnMAPIAddress)(LHANDLE lhSession,

ULONG ulUIParam, LPSTR lpszCaption,

ULONG nEditFields, LPSTR lpszLabels,

ULONG nRecips, lpMapiRecipDesc lpRecips,

FLAGS flFlags, ULONG ulReserved,

LPULONG lpnNewRecips,

lpMapiRecipDesc FAR *lppNewRecips);

ULONG (FAR PASCAL *lpfnMAPIFindNext)(LHANDLE lhSession,

ULONG ulUIParam, LPSTR lpszMessageType,

LPSTR lpszSeedMessageID, FLAGS flFlags,

ULONG ulReserved, LPSTR lpszMessageID);

ULONG (FAR PASCAL *lpfnMAPIReadMail)(LHANDLE lhSession,

ULONG ulUIParam, LPSTR lpszMessageID,

FLAGS flFlags, ULONG ulReserved,

lpMapiMessage FAR *lppMessage);

---- 为了决定每一个函数的地址,必须为每一个函数调用GetProcAddress。GetProcAddress的语法为:

GetProcAddress (hModule, lpProcName);

其中,hModule为HMODULE结构,是所调用DLL模块的句柄;

lpProcName为LPCSTR结构,是函数名称。

程序示例:

// 找到MAPI32.DLL函数的地址,并将它们保存在函数指针变量里

(FARPROC&) lpfnMAPISendMail = GetProcAddress(hInstMail,

“MAPISendMail”);

相关文档
最新文档