IMAPISession::OpenEntry
适用于:Outlook 2013 | Outlook 2016
打开对象并返回接口指针以供其他访问。
HRESULT OpenEntry(
ULONG cbEntryID,
LPENTRYID lpEntryID,
LPCIID lpInterface,
ULONG ulFlags,
ULONG FAR * lpulObjType,
LPUNKNOWN FAR * lppUnk
);
参数
cbEntryID
[in] lpEntryID 参数指向的条目标识符中的字节计数。
lpEntryID
[in]指向要打开的 对象的条目标识符的指针。
lpInterface
[in]指向接口标识符的指针 (IID) ,表示用于访问打开的 对象的接口。 传递 NULL 将返回对象的标准接口。 例如,如果要打开的对象是消息,则标准接口为 IMessage;对于文件夹,它是 IMAPIFolder。 通讯簿对象的标准接口是通讯组列表的 IDistList 和消息用户的 IMailUser 。
ulFlags
[in]控制对象打开方式的标志的位掩码。 可以使用以下标志:
MAPI_BEST_ACCESS
请求使用用户允许的最大网络权限和客户端应用程序的最大访问权限打开对象。 例如,如果客户端具有读/写权限,则应使用读/写权限打开对象;如果客户端具有只读权限,则应使用只读权限打开对象。
MAPI_CACHE_OK
使用所有方法(包括脱机通讯簿)执行名称解析。
MAPI_CACHE_ONLY
仅使用脱机通讯簿来执行名称解析。 例如,可以使用此标志允许客户端应用程序在缓存交换模式下打开全局地址列表 (GAL) ,并从缓存访问该通讯簿中的条目,而无需在客户端和服务器之间创建流量。 仅 Exchange 通讯簿提供程序支持此标志。
MAPI_DEFERRED_ERRORS
允许 OpenEntry 成功返回,可能是在对象对调用客户端完全可用之前。 如果该对象不可用,则进行后续对象调用可能会导致错误。
MAPI_MODIFY
请求读/写权限。 默认情况下,使用只读权限打开对象,客户端不应在授予读/写权限的假设下工作。
MAPI_NO_CACHE
不要使用脱机通讯簿来执行名称解析。 仅 Exchange 通讯簿提供程序支持此标志。
SHOW_SOFT_DELETES
显示当前标记为软删除的项目 (即它们处于已删除项保留时间阶段) 。
lpulObjType
[out]指向打开的对象类型的指针。
lppUnk
[out]指向打开对象的指针的指针。
返回值
S_OK
已成功打开对象。
MAPI_E_NO_ACCESS
尝试修改只读对象,或尝试访问用户权限不足的对象。
MAPI_E_NOT_FOUND
没有与 在 lpEntryID 参数中传递的条目标识符关联的 对象。
MAPI_E_UNKNOWN_ENTRYID
在 lpEntryID 参数中传递的条目标识符采用无法识别的格式。 如果包含 对象的服务提供程序未打开,则通常返回此值。
备注
IMAPISession::OpenEntry 方法打开消息存储或通讯簿对象,并返回指向可用于访问该对象的接口的指针。
给调用方的说明
重要
在公共存储区(如文件夹和邮件)上打开文件夹条目时,请使用 IMsgStore::OpenEntry 而不是 IMAPISession::OpenEntry。 这可确保在配置文件中定义多个 Exchange 帐户时公用文件夹正常运行。
仅当不知道要打开的对象类型时,才调用 IMAPISession::OpenEntry 。 如果知道正在打开文件夹或邮件,请调用 IMsgStore::OpenEntry。 如果知道正在打开通讯簿容器、消息用户或通讯组列表,请调用 IAddrBook::OpenEntry。 这些更具体的方法比 IMAPISession::OpenEntry 更快。
MAPI 将打开具有只读权限的所有对象,除非在 ulFlags 参数中设置了MAPI_MODIFY或MAPI_BEST_ACCESS标志。 设置其中一个标志并不能保证特定类型的访问;授予的权限取决于服务提供程序、访问级别和 对象。 若要确定打开的对象的访问级别, 请检索其PR_ACCESS_LEVEL (PidTagAccessLevel) 属性。
调用 IMAPISession::OpenEntry 并将 lpEntryID 设置为指向消息存储的入口标识符与调用 IMAPISession::OpenMsgStore 方法并设置了 MDB_NO_DIALOG 标志相同。 标志设置也是等效的,但若要使用 OpenMsgStore 请求读/写权限,必须设置MDB_WRITE标志,而不是MAPI_MODIFY。
检查 lpulObjType 参数中返回的值,以确定返回的对象类型是否为预期类型。 如果对象类型不是预期的类型,请将 lppUnk 参数中的指针转换为相应类型的指针。 例如,如果要打开文件夹,请将 lppUnk 强制转换为类型为 LPMAPIFOLDER 的指针。
MFCMAPI 引用
有关 MFCMAPI 示例代码,请参阅下表。
文件 | 函数 | Comment |
---|---|---|
MAPIFunctions.cpp |
CallOpenEntry |
MFCMAPI 使用 IMAPISession::OpenEntry 方法打开对象。 |