长篇故事: 我使用来自http://www.codeproject.com/Articles/10881/MAPIEx-Extended-MAPI-Wrapper的扩展Mapi库来管理相当多的任务。问题是,如果Outlook没有运行,它不会发送实际的消息,它会将消息存储在发件箱中,并且通过库函数发送它们需要使用我不具备的配置文件进行登录。
短篇小说: 我需要使用其默认的profault配置文件启动已安装的Outlook(已经检查过),以便它可以在其发件箱中发送消息(如果有的话)。
在C#中有很多鼠标和光滑的解决方案,2到6行Code,但不幸的是我必须坚持使用非托管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;
}
}
但仍然缺少某些东西。
我非常感谢您提供的任何帮助
答案 0 :(得分:1)
您可以考虑在非托管C ++中使用原始扩展MAPI代码,甚至不使Outlook自动化。此外,在使用Outlook对象模型的情况下,您将获得Send方法触发的安全提示。您可以在Outlook "Object Model Guard" Security Issues for Developers文章中了解相关信息。
有关C ++(扩展MAPI)中的示例,请参阅How To Create a Message With an Attachment and Send It Using MAPI/VC++。
答案 1 :(得分:0)
导入Outlook类型库(#import),以便您可以使用Outlook特定的接口(例如Application)。
#import "libid:00062FFF-0000-0000-C000-000000000046" rename_namespace("Outlook") raw_interfaces_only
或者你可以使用后期绑定并调用IDispatch :: GetIdsOfNames / Invoke。您可以在OutlookSpy中查看属性/方法/事件及其显示(例如,单击Outlook中OutlookSpy功能区上的“应用程序”按钮)。