C++ MAPI 包装器尝试在默认登录后获取发件人地址
Posted
技术标签:
【中文标题】C++ MAPI 包装器尝试在默认登录后获取发件人地址【英文标题】:C++ MAPI wrapper trying to get sender address after a default logon 【发布时间】:2018-05-09 07:06:42 【问题描述】:我想通过 MAPI 包装器获取 Outlook 中默认发件人配置文件的电子邮件地址。 多年来,我一直在使用 Noel Dillbough 的 MAPI 包装器,这里描述 https://www.codeproject.com/Articles/10881/MAPIEx-Extended-MAPI-Wrapper 直到最近我开始在 Windows 10/Outlook 中遇到一些问题,电子邮件卡在发件箱中并且无法发送时才出现问题。 在 2009 年之后找不到解决方案或找到代码更新,所以我想我会尝试 PJ Naughter 包装器 http://www.naughter.com/cmapi.html
如果您通过此处描述的 reg 设置抑制 Outlook 警告,这可以正常工作:http://www.msoutlook.info/question/883
[附带问题:想知道 Dillbough MAPI 包装器如何避免这个问题,这是他明确提到的......
(I) 被提醒了可怕的 Outlook 安全警告。所以,我决定研究扩展的 MAPI。
]
所以我一切顺利,而且效果很好,但是 Naughter 包装器与 Dillbough 包装器相比缺少一个功能。 Naughter 包装器没有任何代码来检索默认电子邮件发件人地址。 Dillbough 包装器具有 GetProfileName 和 GetProfileEmail 函数,如果您继续,它们可以让您轻松找出发件人是谁。 我使用它进行检查,并希望将此功能添加到 Naughter 包装器中。
有人已经这样做了吗? 我试图将它添加到 PJ Naughter 包装器中,但我对 MAPI 的了解有限,而且我开始深入了解包装器的内部。 任何帮助或指向其他实现的指针表示赞赏...?
以下是更多详细信息: 在旧代码中,我调用了没有参数的 CMAPIEx::Login() 来登录到默认的 Outlook 配置文件(即使用空字符串作为配置文件)。 在内部这调用... MAPILogonEx(0, 0, NULL, MAPI_LOGON_UI | MAPI_USE_DEFAULT , &lpMAPISession); (这里讨论过C++ MAPI: MAPILogonEx, how to open default mail inbox?)。
然后,我只需将 GetProfileEmail 作为 lpMAPISession 函数调用,并可以将电子邮件地址作为 CString 进行检查。 我在 PJ Naughter 包装器中找不到等价物
【问题讨论】:
【参考方案1】:您需要调用IMAPISession::QueryIdentity
来检索当前用户。您可以在OutlookSpy 中使用它 - 单击 IMAPISession,然后单击 QueryIdentity。
【讨论】:
听起来很有希望,但不清楚如何添加到现有的包装器中?在此处查看完整的 src 代码:naughter.com/cmapi.html 初始化代码 CMapi::CSession::Initialise 像这样选择 DLL 入口点... m_hMapi = LoadLibraryFromSystem32(_T("MAPI32.DLL")); m_lpfnMAPILogon = reinterpret_cast以上是关于C++ MAPI 包装器尝试在默认登录后获取发件人地址的主要内容,如果未能解决你的问题,请参考以下文章
如何将 C++ dll 静态链接到 .NET 库(将 c++ dll 构建到网络包装器 dll 以获取一个 dll)
尝试通过 Process Pipe 发送/接收到 python 包装器,C++ 代码
通过 CLI 包装器在非托管 C++ 中使用 C#.NET Winform - 需要线程?