无法读取的Outlook邮件项自定义属性在一定的环境

问题描述:

我在我的PASCAL代码定义的常数...无法读取的Outlook邮件项自定义属性在一定的环境

const PropNameForUOID = 'http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/ORIONUOID 

我通过调用设置该属性...

OleVariant(MI).PropertyAccessor.SetProperty(PropNameForUOID, Guid); 

我我正在使用Add-in Express生成的Outlook Addin进行此操作。 MI是Outlook200.pas MailItem; 这一切都适用于设置属性。我没有错误。

这是我如何在后面的代码阅读...

result := OleVariant(MI).PropertyAccessor.GetProperty(PropNameForUOID); 

当我我的Outlook 2013客户端上运行此,打的MS Exchange建立14.3.294.4000,一切都很正常。

但是,我们将其放置在客户端系统上,当我们尝试读取属性时出现错误。设置正常,但读取错误。

在客户端计算机上,我的IT技术人员配置了Outlook 2013以击中他有权访问的另一个交换服务器。然后它工作。我们认为这与客户端的Exchange服务器有关。

可能是这种情况吗?

如果是这样,我们应该寻找什么样的设置?

有没有什么我在做我的Delphi代码错了?

您不应该假定该属性存在并处理由GetProperty返回的异常。看看使用OutlookSpy(点击IMessage按钮)时遇到问题的项目,确保该物业在那里。

+0

我有PropertyAccessor.GetProperty代码包装在try ... except ... end。我不能让这个异常显示给用户。但是,为什么它在一些客户端网络而不是其他网络上工作正常?有没有我们可以向客户推荐的MS Exchange设置?回到我的代码,我可以采取不同的方法吗?要求:如果打印电子邮件,我在该项目上设置的属性无法在打印页面上显示。 –

+0

较旧版本的Outlook从GetProperty返回null,最新版本引发异常。你必须期待和处理这个例外。当然,你必须首先以某种方式设置属性,它不能从任何地方出现。 –

+0

我发现如果我使用'code'UP设置属性:= MI.UserProperties.Add('ORIONUOID',olText,False,olText); UP.Value:= Guid;'code'然后我可以读取它们,但是当用户打印电子邮件时它们也会打印。我怎样才能隐藏这种财产? –