【发布时间】:2019-08-26 03:13:17
【问题描述】:
我有一些代码使用 Windows 上的默认电子邮件客户端发送电子邮件。
如果是 Outlook,我将使用“Outlook.Application”ole 对象,否则我将回退到 MAPI。 这已经在多个站点使用了几年,但现在它不适用于新客户。
/* Pseudocode Delphi */
client = HKEY_CURRENT_USER\Software\Clients\Mail
if client='' then client=HKEY_LOCAL_MACHINE\Software\Clients\Mail
if pos('Outlook',client)>0 then useoutlook:=true;
if useoutlook then OutApp:=CreateOleObject('Outlook.Application');
else UseMapi
使用 Win 10 和 Outlook 2016 MSO (16.0.11901.20070) 32 位的这种方法存在两个问题
- 从注册表读取的返回是 PackagedMail ...我不知道这是什么,也找不到任何关于它的信息。
- Outlook.Application 未包含在已注册的类中
- MAPI 返回 MAPI 000001 不正确的函数错误
我在网上找到了一些线索,表明 Outlook 中的 MAPI 依赖于 Outlook.Application OLE。
我只需要知道如何强制它安装 OLE 类,或者为 MAPI 正确注册它,或者知道它是否不再受支持并且我需要找到不同的解决方案。
我要做的就是发送一封带有 pdf 附件的电子邮件。我发现 Outlook 的 MAPI 支持似乎有点不稳定,我最好使用 OLE,但如果它不再受支持或需要额外的步骤,我需要知道。
如果有人知道 PackagedMail 的任何详细信息,那将是一个奖励。
【问题讨论】:
-
您是否真的在本地安装了 Outlook?
-
是的,AFAICT。 (警告:安装了其他人,我只能有限访问客户站点)
-
那么 CreateOleObject 会引发异常吗?
-
是的,它返回一个找不到对象的错误
-
确切错误是什么?这很可能意味着 Outlook 未安装或对当前用户不可见(例如,如果 Outlook 是从 Windows 应用商店下载的)。
标签: outlook activex mapi outlook.application