Outlook 无效的命名属性

Outlook 无效的命名属性,outlook,office365,exchangewebservices,ewsjavaapi,Outlook,Office365,Exchangewebservices,Ewsjavaapi,我们调用microsoft exchange来设置扩展属性,在本例中,该属性是唯一的guid microsoft.exchange.webservices.data.core.exception.service.remote.ServiceResponseException: An internal server error occurred. The operation failed., Invalid named property 直到现在,当我们的一些用户面临上述问题时,它一直工作得很好

我们调用microsoft exchange来设置扩展属性,在本例中,该属性是唯一的guid

microsoft.exchange.webservices.data.core.exception.service.remote.ServiceResponseException: An internal server error occurred. The operation failed., Invalid named property
直到现在,当我们的一些用户面临上述问题时,它一直工作得很好

 val uId = getUniqueId();    

val emailExtendedPropDef = new ExtendedPropertyDefinition(uId,"uniqueId", MapiPropertyType.String)
    try {
      email.setExtendedProperty(emailExtendedPropDef, uId.toString)
      email.sendAndSaveCopy()
    } catch {
      case e: Exception =>
        error(s"Exception in setting extended property for user $from", e)
        throw e
    }
为了找到问题的根本原因,我们还认为它可能与限制Microsoft exchange上的扩展属性有关。不确定如何证明它是否确实限制了任何帮助,为我们指明正确的方向将有很大帮助

我们的用例是能够在客户想要回复时检索电子邮件我们想要检索要包含在用户回复中的特定电子邮件…目前我们正在使用uid来实现这一点

我们已经按照这里的文档使用了代码

还有这里的文档

更新:根据评论,我们确实理解,我们必须将extendedProperty视为一个列定义,并更新同一列…但我们不知道如何实现这一点,因为…任何代码示例都将为我们指明正确的方向


最新更新:我们已经删除了一些extendedPropertyDefinition,但仍然面临相同的无效属性。有人能告诉我们正确的方向吗?

可以安全地说getUniqueId在每次调用时返回不同的guid吗?如果是这样,那就是问题所在。将扩展属性的Guid视为命名空间。exchange存储区将自定义扩展道具的数量限制为每个邮箱32k左右。所以你很可能达到了这个极限。但除此之外,创建扩展属性的主要原因是为了以后可以引用它。但如果每次基本上都放弃名称空间,则会在项目上留下孤立的道具。在不理解您的特定场景的情况下,我只能说Guid应该真正被视为一个名称空间。为你的应用程序/公司/场景选择一个,然后硬编码。它们在该名称空间中创建您想要的所有命名道具。例如,Guid命名空间1中的MyProp/String与Guid命名空间2中的MyProp/String是不同的属性。

非常感谢您的回复!我们并没有放弃guid,而是在用户尝试回复时使用它来检索电子邮件,我们的用例是在用户当前尝试回复时检索电子邮件,我们是基于uid进行的,正如你所说,如果我们达到32k限制,我们所有的用户都会受到影响,但只有两个用户受到影响。那么,我们如何确保我们达到了任何限制呢?这将是非常有帮助的。此外,我认为我们按照这里的文档使用guid,我将使用一个扩展属性,并为每个用户设置不同的guid电子邮件考虑扩展属性定义,比如数据库模式属性,每个项都可以具有不同的属性值。你正在做的是为每封邮件创建一个不同的模式道具,我认为这不是你想要的。再次感谢你的回复!我知道我们必须使用扩展属性作为数据库模式属性…请您为我们指出一个代码示例,介绍如何使用扩展属性。我看到的大多数代码示例都创建了一个新的ExtendedPropertyDefinition,其中uid的值是构造函数中的一个值,包括这个值。同样,请将propertySetId视为数据库中的列名。该列可以包含很多不同的值-表中的每条记录对应一个值。以GitHub链接为例:UUID yourPropertySetId=UUID.fromString;//定义扩展属性本身。ExtendedPropertyDefinition ExtendedPropertyDefinition=新的ExtendedPropertyDefinition yourPropertySetId,MyProperty,MapPropertyType.String;//标记扩展属性消息。setExtendedPropertyextendedPropertyDefinition,MyValue;