📄 01_9_14_17.asp.html
字号:
ULONG (FAR PASCAL *lpfnMAPILogoff)(LHANDLE lhSession, </td></tr></table><table width=100% ><tr><td class=a14>
ULONG ulUIParam, FLAGS flFlags,</td></tr></table><table width=100% ><tr><td class=a14>
ULONG ulReserved);</td></tr></table><table width=100% ><tr><td class=a14>
ULONG (FAR PASCAL *lpfnMAPIFreeBuffer)(LPVOID lpBuffer);</td></tr></table><table width=100% ><tr><td class=a14>
ULONG (FAR PASCAL *lpfnMAPIAddress)(LHANDLE lhSession,</td></tr></table><table width=100% ><tr><td class=a14>
ULONG ulUIParam, LPSTR lpszCaption,</td></tr></table><table width=100% ><tr><td class=a14>
ULONG nEditFields, LPSTR lpszLabels,</td></tr></table><table width=100% ><tr><td class=a14>
ULONG nRecips, lpMapiRecipDesc lpRecips,</td></tr></table><table width=100% ><tr><td class=a14>
FLAGS flFlags, ULONG ulReserved, </td></tr></table><table width=100% ><tr><td class=a14>
LPULONG lpnNewRecips, </td></tr></table><table width=100% ><tr><td class=a14>
lpMapiRecipDesc FAR *lppNewRecips);</td></tr></table><table width=100% ><tr><td class=a14>
ULONG (FAR PASCAL *lpfnMAPIFindNext)(LHANDLE lhSession,</td></tr></table><table width=100% ><tr><td class=a14>
ULONG ulUIParam, LPSTR lpszMessageType, </td></tr></table><table width=100% ><tr><td class=a14>
LPSTR lpszSeedMessageID, FLAGS flFlags,</td></tr></table><table width=100% ><tr><td class=a14>
ULONG ulReserved, LPSTR lpszMessageID);</td></tr></table><table width=100% ><tr><td class=a14>
ULONG (FAR PASCAL *lpfnMAPIReadMail)(LHANDLE lhSession, </td></tr></table><table width=100% ><tr><td class=a14>
ULONG ulUIParam, LPSTR lpszMessageID,</td></tr></table><table width=100% ><tr><td class=a14>
FLAGS flFlags, ULONG ulReserved, </td></tr></table><table width=100% ><tr><td class=a14>
lpMapiMessage FAR *lppMessage);</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
为了决定每一个函数的地址,必须为每一个函数调用GetProcAddress。 </td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
GetProcAddress的语法为:</td></tr></table><table width=100% ><tr><td class=a14>
GetProcAddress (hModule, lpProcName);</td></tr></table><table width=100% ><tr><td class=a14>
其中,hModule为HMODULE结构,是所调用DLL模块的句柄;</td></tr></table><table width=100% ><tr><td class=a14>
lpProcName为LPCSTR结构,是函数名称。</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
程序示例:</td></tr></table><table width=100% ><tr><td class=a14>
// 找到MAPI32.DLL函数的地址,并将它们保存在函数指针变量里</td></tr></table><table width=100% ><tr><td class=a14>
(FARPROC&) lpfnMAPISendMail = GetProcAddress(hInstMail,</td></tr></table><table width=100% ><tr><td class=a14>
“MAPISendMail”);</td></tr></table><table width=100% ><tr><td class=a14>
(FARPROC&) lpfnMAPIResolveName = GetProcAddress(</td></tr></table><table width=100% ><tr><td class=a14>
hInstMail, “MAPIResolveName”);</td></tr></table><table width=100% ><tr><td class=a14>
(FARPROC&) lpfnMAPILogon = GetProcAddress(hInstMail,</td></tr></table><table width=100% ><tr><td class=a14>
“MAPILogon”);</td></tr></table><table width=100% ><tr><td class=a14>
(FARPROC&) lpfnMAPILogoff = GetProcAddress(hInstMail,</td></tr></table><table width=100% ><tr><td class=a14>
“MAPILogoff”);</td></tr></table><table width=100% ><tr><td class=a14>
(FARPROC&) lpfnMAPIFreeBuffer = GetProcAddress(</td></tr></table><table width=100% ><tr><td class=a14>
hInstMail, “MAPIFreeBuffer”);</td></tr></table><table width=100% ><tr><td class=a14>
(FARPROC&) lpfnMAPIAddress = GetProcAddress(hInstMail,</td></tr></table><table width=100% ><tr><td class=a14>
“MAPIAddress”);</td></tr></table><table width=100% ><tr><td class=a14>
(FARPROC&) lpfnMAPIFindNext = GetProcAddress(hInstMail,</td></tr></table><table width=100% ><tr><td class=a14>
“MAPIFindNext”);</td></tr></table><table width=100% ><tr><td class=a14>
(FARPROC&) lpfnMAPIReadMail = GetProcAddress(hInstMail,</td></tr></table><table width=100% ><tr><td class=a14>
“MAPIReadMail”);</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr>
<td class=a14> <i>3-1-3 登录到电子邮件对象 </i></td>
</tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
用户必须在电子邮件系统中登录,才能实现MAPI的各种功能。MAPI提供了登录的三种选择: </td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
登录到一个已经存在的对象。 </td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
登录到一个新对象,用编程的方法确定解释新信息。 </td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
使用对话框提示用户登录。 </td></tr></table><table width=100% ><tr><td class=a14>
我们通常选择登录到一个已经存在的电子邮件对象,因为网络合作用户通常会保持自己的电子邮件程序处于激活状态。登录通常使用MAPI提供的函数lpfnMAPILogon。 </td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
lpfnMAPILogon的语法为:</td></tr></table><table width=100% ><tr><td class=a14>
lpfnMAPILogon (lpszProfileName, lpszPassword, flFlags, </td></tr></table><table width=100% ><tr><td class=a14>
ulReserved, lplhSession );</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
其中,lpszProfileName指向一个256字符以内的登录名称,lpszPassword指向密码,它们均为LPTSTR结构。flFlags为FLAGS结构,其值详见表1。ulReserved必须为0。lplhSession为输出SMAPI的句柄。 </td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
表1:lpfnMAPILogon函数中flFlags的值</td></tr></table><table width=100% ><tr><td class=a14>
值 意义</td></tr></table><table width=100% ><tr><td class=a14>
MAPI_FORCE_DOWNLOAD </td></tr></table><table width=100% ><tr><td class=a14>
在函数调用返回之前下载用户的所有邮件。</td></tr></table><table width=100% ><tr><td class=a14>
如果MAPI_FORCE_DOWNLOAD没有被设置,</td></tr></table><table width=100% ><tr><td class=a14>
那么信件能够在函数调用返回后在后台被下载。</td></tr></table><table width=100% ><tr><td class=a14>
MAPI_NEW_SESSION 建立一个新会话,</td></tr></table><table width=100% ><tr><td class=a14>
而不是获得环境的共享会话。如果MAPI_NEW_SESSION没有被设置,</td></tr></table><table width=100% ><tr><td class=a14>
MAPILogon使用现有的共享会话。</td></tr></table><table width=100% ><tr><td class=a14>
MAPI_LOGON_UI 显示一个登录对话框来提示用户输入登录信息。</td></tr></table><table width=100% ><tr><td class=a14>
例如Outlook检查用户电子邮件时便是如此。</td></tr></table><table width=100% ><tr><td class=a14>
MAPI_PASSWORD_UI MAPILogon只允许用户输入电子邮件的密码,</td></tr></table><table width=100% ><tr><td class=a14>
而不许改动账号。</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
程序示例:</td></tr></table><table width=100% ><tr><td class=a14>
LHANDLE lhSession;</td></tr></table><table width=100% ><tr><td class=a14>
ULONG lResult = lpfnMAPILogon(0, NULL, NULL, 0, 0, </td></tr></table><table width=100% ><tr><td class=a14>
&lhSession);</td></tr></table><table width=100% ><tr><td class=a14>
if (lResult != SUCCESS_SUCCESS)</td></tr></table><table width=100% ><tr><td class=a14>
//SUCCESS_SUCCESS在MAPI.H中被定义</td></tr></table><table width=100% ><tr><td class=a14>
{</td></tr></table><table width=100% ><tr><td class=a14>
// 错误处理</td></tr></table><table width=100% ><tr><td class=a14>
}</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr>
<td class=a14> <i>3-2 阅读电子邮件 </i></td>
</tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
MAPIFindNext和MAPIReadMail使用与阅读E-mail的两个基本函数。MAPIFindNext用于定位第一封或下一封电子邮件并返回标识号,MAPIReadMail返回以该标识号为基础的电子邮件的内容。另外,一个常用的函数是MAPIFreeBuffer,用于释放内存。 </td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr>
<td class=a14> <i>3-2-1 定位到第一封信 </i></td>
</tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
要找到第一封信,需要使用MAPIFindNext函数,其函数声明如下: </td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
ULONG FAR PASCAL MAPIFindNext(LHANDLE lhSession, </td></tr></table><table width=100% ><tr><td class=a14>
ULONG ulUIParam, LPTSTR lpszMessageType, </td></tr></table><table width=100% ><tr><td class=a14>
LPTSTR lpszSeedMessageID, FLAGS flFlags, </td></tr></table><table width=100% ><tr><td class=a14>
ULONG ulReserved, LPTSTR lpszMessageID )</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
其中,lhSession为提交SMAPI的会话句柄 ;ulUIParam为父窗体的句柄;lpszMessageType指向一个字符串,用来鉴别邮件类型,并加以查找;lpszSeedMessageID为指向起始信息ID的指针,其值为0时,MAPIFindNext获得第一封电子邮件;flFlags的值见表2;ulReserved必须为0;lpszMessageID为输出值,它是指向信息ID地址的指针。 </td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
表2:MAPIFindNext函数中flFlags的值 </td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
值 意义</td></tr></table><table width=100% ><tr><td class=a14>
MAPI_GUARANTEE_FIFO 按邮件发送的时间顺序接受电子邮件。</td></tr></table><table width=100% ><tr><td class=a14>
MAPI_LONG_MSGID 返回信件标识符可达512字符。</td></tr></table><table width=100% ><tr><td class=a14>
MAPI_UNREAD_ONLY 只列举没有阅读过的电子邮件。</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
程序示例:</td></tr></table><table width=100% ><tr><td class=a14>
// 找到第一条没有阅读的电子邮件</td></tr></table><table width=100% ><tr><td class=a14>
char pMessageID [513];</td></tr></table><table width=100% ><tr><td class=a14>
ULONG lResult = lpfnMAPIFindNext(lhSession, NULL, NULL,</td></tr></table><table width=100% ><tr><td class=a14>
NULL, MAPI_LONG_MSGID | MAPI_UNREAD_ONLY,</td></tr></table><table width=100% ><tr><td class=a14>
0, pMessageID);</td></tr></table><table width=100% ><tr>
<td class=a14> <i>3-2-2 阅读信息</i></td>
</tr></table><table width=100% ><tr><td class=a14>
当信件ID被获取后,就可以调用MAPIReadMail</td></tr></table><table width=100% ><tr><td class=a14>
阅读实际的E-mail信息了。MAPIReadMail的函数声明如下:</td></tr></table><table width=100% ><tr><td class=a14>
ULONG FAR PASCAL MAPIReadMail(LHANDLE lhSession, </td></tr></table><table width=100% ><tr><td class=a14>
ULONG ulUIParam, LPTSTR lpszMessageID, </td></tr></table><table width=100% ><tr><td class=a14>
FLAGS flFlags, ULONG ulReserved,</td></tr></table><table width=100% ><tr><td class=a14>
lpMapiMessage FAR * lppMessage);</td></tr></table><table width=100% ><tr><td class=a14>
其中,lppMessage为指向MapiMessage的指针;</td></tr></table><table width=100% ><tr><td class=a14>
除flFlags外的其他参数与lpfnFindNext函数的同名参数意义相同,</td></tr></table><table width=100% ><tr><td class=a14>
flFlags参数的值见表3:</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
表3:MAPIReadMail函数中flFlags的值:</td></tr></table><table width=100% ><tr><td class=a14>
值 意义</td></tr></table><table width=100% ><tr><td class=a14>
MAPI_BODY_AS_FILE 将邮件信息写到一个临时文件中,</td></tr></table><table width=100% ><tr><td class=a14>
并且将它作为第一个附件添加到附件列表中。</td></tr></table><table width=100% ><tr><td class=a14>
MAPI_ENVELOPE_ONLY 只读取邮件标题。</td></tr></table><table width=100% ><tr><td class=a14>
MAPI_PEEK 读完邮件之后不把它标记为“已读”。</td></tr></table><table width=100% ><tr><td class=a14>
MAPI_SUPPRESS_ATTACH MAPIReadMail函数不拷贝附件,</td></tr></table><table width=100% ><tr><td class=a14>
但是将邮件文本写入MapiMessage结构中。</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
程序示例:</td></tr></table><table width=100% ><tr><td class=a14>
// 读取电子邮件</td></tr></table><table width=100% ><tr><td class=a14>
long nFlags = MAPI_SUPPRESS_ATTACH;</td></tr></table><table width=100% ><tr><td class=a14>
if (!bMarkAsRead)</td></tr></table><table width=100% ><tr><td class=a14>
nFlags = nFlags | MAPI_PEEK;</td></tr></table><table width=100% ><tr><td class=a14>
lResult = lpfnMAPIReadMail(lhSession, NULL, pMessageID,</td></tr></table><table width=100% ><tr><td class=a14>
nFlags, 0, &pMessage);</td></tr></table><table width=100% ><tr><td class=a14>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -