如何在Outlook

时间:2015-04-30 12:23:44

标签: email encryption outlook outlook-addin

我正在开发一个自动解密电子邮件的Outlook-AddIn。所以基本上,AddIn会在新邮件到达时更改一些MailItem属性(主题,正文,附件)。问题是,当我保存项目时,解密的消息与服务器同步,这对于端到端加密非常糟糕...如果我不保存项目,那么资源管理器窗格仍会显示加密的邮件和搜索电子邮件(解密的主题或正文)不起作用。

我的问题是:如何显示和(本地)存储解密的mailItem,以便所有常用功能(如电子邮件搜索)仍可正常工作? 有没有办法停止.ost中的特定电子邮件的同步?

我想出的一个解决方案是将MailItem的副本存储在本地.pst存储中。但在这种情况下,用户必须处理两个不同商店(.ost和.pst)中的消息,这对用户不是很友好。要求是用户在阅读电子邮件时必须尽可能少地改变其惯常行为。

private void Outlook_NewMailEx(object Item)
    {
        Outlook.MailItem mailItem = Application.Session.GetItemFromID((string)Item);

        if (mailItem != null)
        {
            // decrypt the mailItem
            mailItem.Subject = "decrypted subject";
            mailItem.Body = "decrypted body";

            // save mailItem LOCALLY
            // (don't synchronize the decrypted message with the server)
            mailItem.Save();
        }                    
    }

我将不胜感激任何帮助!

1 个答案:

答案 0 :(得分:1)

  

我想出的一个解决方案是将MailItem的副本存储在本地.pst存储中。

这是我第一次想到可能的实现。

您也可以考虑以下情况:

  1. 将项目的解密副本保存在隐藏文件夹中。 Folder类的GetStorage方法返回父文件夹上的StorageItem对象,以存储Outlook解决方案的数据。 StorageItem对象存储在文件夹级别,允许它与帐户一起漫游并可在线或离线使用。 Outlook对象模型不为StorageItem对象提供任何集合对象。但是,当您将TableContents参数指定为olHiddenItems时,可以使用Folder.GetTable获取包含文件夹中所有隐藏项的表。
  2. 获得StorageItem对象后,您可以执行以下操作来存储解决方案数据:

    • 将附件添加到要存储的项目中。
    • 使用Body等项目的显式内置属性来存储自定义数据。
    • 使用UserProperties.Add方法向项目添加自定义属性。请注意,在这种情况下,将忽略UserProperties.Add方法的可选AddToFolderFields和DisplayFormat参数。
    • 使用PropertyAccessor对象获取或设置自定义属性。

    有关详细信息,请参阅Storing Data for Solutions

    1. 使用解密的内容向Outlook项目添加自定义属性。因此,当要显示该项目时,您可以即时替换内置属性的内容。
    2. 另一种解决方案是将解密后的信息存储在数据库中。请注意,您开发了托管加载项,因此您可以使用.net框架的所有功能。