使用 C# 和 Microsoft Outlook 365 Interop。如何设置信任状态?

问题描述 投票:0回答:1

我们这样使用Microsoft Outlook的互操作服务:

using Outlook = Microsoft.Office.Interop.Outlook;

...

private Outlook.MailItem _message = null;

...

SendingMailStarted?.Invoke(this, EventArgs.Empty);
InitMailParams();
_message.Send();
SendingMailCompleted?.Invoke(this, new AsyncCompletedEventArgs(null, false, null));

...

private void InitMailParams()
{
    Outlook.Application outlook;
    if (!Process.GetProcessesByName("OUTLOOK").Any())
    {
        Log.Debug("Outlook not running. Creating new outlook application object!");
        outlook = new Outlook.Application();
    }
    else
    {
        Log.Debug("Getting the current outlook application object!");
        try
        {
            outlook = (Outlook.Application)Marshal.GetActiveObject("Outlook.Application");
        }
        catch (COMException exc)
        {
            Log.Debug("Current running Outlook object not accessible - HResult: " + exc.HResult);
            Log.Debug("Creating new outlook application object instead!");
            outlook = new Outlook.Application();
        }
    }

    _message = (Outlook.MailItem)outlook.CreateItem(Outlook.OlItemType.olMailItem);
    Outlook.Recipients recipients = _message.Recipients;

    ...
}

对于大多数用户来说,这没有任何问题。但是对于一些我们得到错误 0x80004004。这意味着 Outlook 已经自行中止,并且可能在这里安全设置阻止了我们的应用程序。有 TrustedAddIns。但是我们只有一个“普通”应用程序,没有插件。那么我们如何才能让我们的应用程序看起来对 Outlook 来说是可信的呢?

对于 Outlook 2007,有一种方法可以生成 dll 的哈希值并将其放入注册表中。但这只适用于加载项,而且 Outlook 似乎要求提供证书之类的东西。但是怎么办?在哪里?我需要这方面的信息,但找不到任何东西......

编辑: 用户的安全设置包括以下内容: 注册表:HKCU\software\policies\microsoft\office .0\outlook\security -> PromptOOMSend:0 或相同的设置(发送电子邮件时提示用户输入 Outlook 对象模型:自动拒绝)

但是如果应用程序是可信的,这些设置将被忽略......现在我想知道如何使用这个“可信”......

c# security outlook office365 office-automation
1个回答
0
投票

从外部应用程序自动化 Outlook 时,您似乎遇到了安全问题。要处理安全的

Application
对象和整个 Outlook 对象模型,您需要开发一个 COM 加载项,它可以与主机应用程序一起运行。在这种情况下,您可以使用标准的 .net 框架技术将两个应用程序连接在一起,例如 .net 远程处理等

为避免安全问题,您可以:

  1. 使用不会在 Outlook 中触发问题/对话框的低级 API - 扩展 MAPI 或围绕该 API 的任何第三方包装程序,例如 Redemption。
  2. 使用第三方组件抑制 Outlook 中的此类问题/对话框,例如,参见 https://www.add-in-express.com/outlook-security/index.php.
  3. 开发一个 COM 加载项,可以访问受信任的
    Application
    对象。
  4. 安装任何具有最新更新的 AV。
  5. 使用 GPO 设置设置以不触发安全问题/对话框。

在 Outlook 中的“程序正试图代表您发送电子邮件”警告文章中阅读更多相关信息。

© www.soinside.com 2019 - 2024. All rights reserved.