IMAPISession::OpenMsgStore
适用于:Outlook 2013 | Outlook 2016
打开消息存储并返回 IMsgStore 指针以供进一步访问。
HRESULT OpenMsgStore(
ULONG_PTR ulUIParam,
ULONG cbEntryID,
LPENTRYID lpEntryID,
LPCIID lpInterface,
ULONG ulFlags,
LPMDB FAR * lppMDB
);
参数
ulUIParam
[in]公共地址对话框和其他相关显示的父窗口的句柄。
cbEntryID
[in] lpEntryID 参数指向的条目标识符中的字节计数。
lpEntryID
[in]指向要打开的消息存储的条目标识符的指针。 lpEntryID 参数不能为 NULL。
lpInterface
[in]指向接口标识符的指针 (IID) ,表示用于访问消息存储的接口。 传递 NULL 会导致 lppMDB 参数返回指向消息存储 (IMsgStore) 的标准接口的指针。
ulFlags
[in]控制对象打开方式的标志的位掩码。 可以使用以下标志:
MAPI_BEST_ACCESS:请求使用用户允许的最大网络权限和最大客户端应用程序权限打开消息存储。 例如,如果客户端具有读/写权限,则应使用读/写权限打开消息存储;如果客户端具有只读权限,则应使用只读权限打开消息存储。
MAPI_DEFERRED_ERRORS:允许 OpenMsgStore 成功返回,可能是在消息存储对调用客户端完全可用之前。 如果消息存储不可用,则进行后续对象调用可能会引发错误。
MDB_NO_DIALOG:阻止显示登录对话框。 如果设置了此标志,并且 OpenMsgStore 的配置信息不足,无法在没有用户帮助的情况下打开消息存储区,则会返回MAPI_E_LOGON_FAILED。 如果未设置此标志,消息存储提供程序可以提示用户更正名称或密码,或者执行与消息存储建立连接所需的其他操作。
MDB_NO_MAIL:邮件存储不应用于发送或接收邮件。 设置此标志后,MAPI 不会通知 MAPI 后台处理程序此消息存储正在打开。
MDB_ONLINE:在缓存 Exchange 模式下,客户端或服务提供商可以使用 MDB_ONLINE 调用此方法,以覆盖与本地消息存储的连接,并打开远程服务器上的存储。 不能在同一 MAPI 会话中同时以缓存模式和非缓存模式打开 Exchange 存储。 如果已经打开缓存的邮件存储区,或者必须使用此标记关闭存储,或打开新的 MAPI 会话,可以使用此标记在远程服务器上打开 Exchange 存储。
MDB_TEMPORARY:指示 MAPI 消息存储不是永久性的,不应添加到消息存储表中。 此标志用于登录到消息存储,以便可以通过编程方式从配置文件部分检索信息。
MDB_WRITE:请求对消息存储的读/写权限。
lppMDB
[out]指向消息存储的指针的指针。
返回值
S_OK
已成功打开消息存储。
MAPI_E_NO_ACCESS
尝试访问用户权限不足的消息存储。
MAPI_E_NOT_FOUND
lpEntryID 指示的消息存储不存在。
MAPI_E_UNKNOWN_CPID
服务器未配置为支持客户端的代码页。
MAPI_E_UNKNOWN_LCID
服务器未配置为支持客户端的区域设置信息。
MAPI_W_ERRORS_RETURNED
调用成功,但消息存储提供程序提供了错误信息。 返回此警告时,应将调用处理为成功。 若要从提供程序获取错误信息,请调用 IMAPISession::GetLastError 方法。 若要测试此警告,请使用 HR_FAILED 宏。 有关详细信息,请参阅 使用宏进行错误处理。
备注
IMAPISession::OpenMsgStore 方法打开特定的消息存储。
给调用方的说明
消息存储的默认权限级别为只读。 如果设置MDB_WRITE标志,可能仍没有向你授予读/写权限。 MAPI 分配给消息存储的最终访问级别取决于你的权限级别、消息存储本身和消息存储提供程序。
如果调用 OpenMsgStore 以打开具有只读权限的消息存储,将发生以下情况:
存储的 PR_STORE_SUPPORT_MASK (PidTagStoreSupportMask) 属性不会设置其STORE_MODIFY_OK和STORE_CREATE_OK位。
调用以使用 IMAPISession::OpenEntry 打开邮件存储区的邮件或文件夹之一并设置了 MAPI_MODIFY 标志将失败。
使用 IMAPIProp::OpenProperty 和 MAPI_MODIFY 标志打开消息存储区的邮件或文件夹的属性之一的调用将失败。
对以下任一方法的调用都将失败:
如果复制的消息的目标为只读,无论目标与源消息存储相同还是另一个只读存储区,对以下方法的调用都将失败。
MFCMAPI 引用
有关 MFCMAPI 示例代码,请参阅下表。
文件 | 函数 | Comment |
---|---|---|
MAPIStoreFunctions.cpp |
CallOpenMsgStore |
MFCMAPI 使用 IMAPISession::OpenMsgStore 方法打开消息存储。 |