0

我有一些代码使用 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 有任何详细信息,那将是一个奖励。

4

1 回答 1

1

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

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

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

这在 Regedit 中清晰可见并填充,但由于注册表重定向,Delphi 不可见

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

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows Messaging Subsystem

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

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

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

于 2019-08-27T01:35:39.303 回答