【问题标题】:How to avoid Outlook security alert when reading outlook message from C# program从 C# 程序读取 Outlook 消息时如何避免 Outlook 安全警报
【发布时间】:2010-09-19 02:41:26
【问题描述】:

我需要从 C# 程序读取 Outlook 收件箱中新邮件的主题、发件人地址和邮件正文。但是我收到了安全警报“一个程序正在尝试访问您存储在 Outlook 中的电子邮件地址。你想允许这个吗?

通过谷歌搜索,我发现很少有第三方 COM 库可以避免这种情况。但我正在寻找一种不需要任何第三方 COM 库的解决方案。

【问题讨论】:

    标签: c# outlook


    【解决方案1】:

    抱歉,我在 Outlook 2003 和 Outlook 2007 加载项中都遇到了这个烦人的问题,唯一有效的解决方案是购买Redemption 许可证。据我所知,在 Outlook 2007 中,只有在您的防火墙已关闭或您的防病毒软件已过时时才会出现这个讨厌的弹出窗口。

    【讨论】:

    • 不幸的事实是,有太多的 Outlook 被滥用,以至于微软将其锁定并且没有提供解决方法。我想您可以尝试复制 Redemption 自己所做的事情,但我怀疑成本/收益会超过 200 美元的许可证。
    • 确实,200 美元与您需要想出赎回之类的时间相比算不了什么
    • 我不了解你们,但我在下面尝试了 Kumar 的回答(使用oOutlookApp = Globals.ThisAddIn.Application,而不是创建一个新的 Outlook 对象,它对我来说非常有用,你应该完全支持他的回答!:-))
    【解决方案2】:

    如果您的应用程序不是 Outlook 插件,您可以查看 MAPI 以从收件箱中读取数据

    【讨论】:

      【解决方案3】:

      试试这个

      工具-->宏-->安全-->程序访问

      然后选择从不就可疑活动向我发出警告。

      【讨论】:

      • 我赞成亲吻原则。我搜索了stackoverflow,发现这个线程我们应该调用它。阅读所有关于花哨的解决方案。读这个。试过了,当你知道什么。有效。这就是我喜欢的那种简单的解决方案。我很幸运我的客户使用的是 Outlook2007。并非所有早期的 Outlook 都有此选项。
      • 我的 Outlook 2007 中禁用了所有这些选项。是因为我们有 Exchange Server 吗?是否可以通过组策略或类似的方式进行设置?
      • 我在 2003 年看不到程序化访问
      【解决方案4】:

      “但我正在寻找一种不需要任何第三方 COM 库的解决方案。”

      你不会找到它。 Kasper 已经指出了我所知道的唯一解决方案。赎回是保持 Outlook 插件和代码正常工作的唯一方法。我为富兰克林柯维做过商业 Outlook 插件。我们探索了很多东西,但救赎是唯一让我们克服这一障碍的东西。

      【讨论】:

      • 实际上,我已经能够自动“点击”掉这条消息,这样用户就不会注意到它(2003 年和 2007 年)。在商业应用中。
      • @Danbystrom:你是怎么做到的?
      • @Jeff:欺骗 Outlook 以相信确定按钮正在被人类按下...
      • @danbystrom:你用过 SendKeys ~ 之类的东西吗?由于 Outlook 中的对话框挂起我的应用程序,因此我看不到它在工作。我对你所做的很感兴趣
      • @Jeff:我不想透露太多:对话框存在是有原因的。我只是想指出“你不会找到它”的答案是完全错误的。不要停止寻找。 :-) 这里有一些线索:至于 Outlook 挂起你的应用程序,在开始与 Outlook 对话之前,你需要启动一个后台线程来为你完成工作。至于 SendKeys - 不,Outlook 比这更聪明,并且会弄清楚发生了什么。但是还有其他常见的、有据可查的 API 函数可以组合起来实现这一目的。
      【解决方案5】:

      我在访问 Outlook 邮件项目的发件人电子邮件地址时遇到了同样的问题。为避免“安全警报”,请勿创建新的应用程序对象,而是使用 Globals.ThisAddIn.Application 来创建新的邮件项。

      string GetSenderEmail(Outlook.MailItem item)
          {
              string emailAddress = "";
              if (item.SenderEmailType == "EX")
              {
                  Outlook.MailItem tempItem = (Outlook.MailItem)Globals.ThisAddIn.Application.CreateItem(Outlook.OlItemType.olMailItem);
                  tempItem.To = item.SenderEmailAddress;
                  emailAddress = tempItem.Recipients[1].AddressEntry.GetExchangeUser().PrimarySmtpAddress.Trim();
      
              }
              else
              {
                  emailAddress = item.SenderEmailAddress.Trim();
      
              }
      
              return emailAddress;
          }
      

      【讨论】:

      • 如果您正在创建一个实际的 Outlook 加载项(而不是一个正在利用 Outlook 的外部应用程序),那么这是正确的答案。进程中的插件不会触发警告对话框,只要它们只使用 Outlook 在启动时提供的 Application 对象(即不创建新的 Application 对象)。
      • 优秀的答案!我发现绝大多数示例添加代码总是创建一个新的Application 对象。这解决了很多问题。 :D
      【解决方案6】:

      为此,我们使用 Mapilab 的 Advanced Security for Outlook。它是免费的,也可用于商业用途,并且仍然保证 Outlook 的安全(仅允许从批准的应用程序访问)。刚才提到的解决方案要么花钱,要么可能危及安全。

      【讨论】:

        【解决方案7】:

        您可以使用 Outlook 的信任中心禁用安全弹出窗口。 检查here

        【讨论】:

          猜你喜欢
          • 2013-01-31
          • 1970-01-01
          • 1970-01-01
          • 2010-11-06
          • 2012-08-09
          • 2011-01-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多