【问题标题】:Is Outlook.Application component still supported in Outlook 2016?Outlook 2016 是否仍支持 Outlook.Application 组件?
【发布时间】: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 位的这种方法存在两个问题

  1. 从注册表读取的返回是 PackagedMail ...我不知道这是什么,也找不到任何关于它的信息。
  2. Outlook.Application 未包含在已注册的类中
  3. 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


【解决方案1】:

部分答案解决了我的直接问题:

Delphi Winapi.Mapi 单元检查注册表以查看是否安装了 MAPI:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Messaging Subsystem
  MAPI="1"

这在 Regedit 中清晰可见并填充,但由于 Registry Redirection 而对 Delphi 不可见

3 个 2 位应用程序看到的实际注册表项存储在这里:

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows Messaging Subsystem

由于某种原因未填充。手动将 MAPI="1" 添加到 WOW6432Node 条目使 MAPI 功能重新开始工作。

这仍然不能回答我的实际问题,但我认为值得记录。

注意:MAPI 值是 REGSZ(字符串)类型。

【讨论】:

    猜你喜欢
    • 2016-11-11
    • 2022-07-30
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    • 2012-12-21
    • 2018-08-02
    • 2018-09-02
    • 2021-01-12
    相关资源
    最近更新 更多