【发布时间】:2015-09-05 11:32:52
【问题描述】:
长篇大论: 我已经使用来自http://www.codeproject.com/Articles/10881/MAPIEx-Extended-MAPI-Wrapper 的扩展 Mapi 库管理了很多任务。问题是,如果 Outlook 没有运行,它不会发送实际的消息,它会将消息存储在发件箱中,并且使用库函数发送它们需要使用我不会一直拥有的配置文件登录。
小故事: 我需要使用其默认配置文件启动已安装的 Outlook(已检查),以便它可以在其发件箱中发送邮件(如果有)。
在 C# 中有非常巧妙的解决方案,只有 2 到 6 行代码,但不幸的是我不得不坚持使用非托管 VC++。
第一次尝试: 我已经用 WIN32 OLE 界面和 Microsoft Word 做了很多事情。这次我只希望程序启动,如果还没有运行的话。 所以我尝试了
// Outlook Test
CoInitialize(NULL);
CLSID clsid;
HRESULT hr = CLSIDFromProgID(L"Outlook.Application", &clsid);
IDispatch *pOApp;
if(SUCCEEDED(hr))
{
IUnknown *pUnk;
hr = GetActiveObject(clsid, NULL, (IUnknown**)&pUnk);
if(FAILED(hr))
{
hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER,
IID_IDispatch, (void **)&pOApp);
if(FAILED(hr)) pOApp=NULL;
}
else if(pUnk)
{
hr = pUnk->QueryInterface(IID_IDispatch, (void **)&pOApp);
if(FAILED(hr)) pOApp=NULL;
}
}
但仍然缺少一些东西。
非常感谢您提供的任何帮助
【问题讨论】:
-
我们可以做到这一点而不必猜测可能会出现什么问题吗?
-
我知道这种方法有什么问题。我至少需要调用一个 OLEMethod,但我不知道是哪一个,因为它没有记录在案。我在这里问了这个问题,有点希望,对WIN32OLE界面冷的人给我一些建议。
-
或者你可以提出另一个建议我如何打开 Outlook。我真的很喜欢这个界面。
-
代码中是否有错误代码?您可能会发现 support.microsoft.com/en-us/kb/2575036 和 support.microsoft.com/en-us/kb/220600 文章很有帮助。
标签: visual-c++ com mfc outlook ole