从mailbox.getCallbackTokenAsync返回的令牌可以对邮件项目执行写操作吗

时间:2018-11-03 09:20:28

标签: c# exchange-server exchangewebservices office-js outlook-web-addins

从此doc中,我们可以使用getCallbackTokenAsync获取令牌,我们可以使用该令牌来调用第三方系统中的Exchange Web服务。 引号是“获取包含用于从Exchange Server获取附件或项目的令牌的字符串”。它没有对“写”权限进行任何限制。

然后,根据此doc,如果将加载项权限更改为ReadWriteMailbox,则可以“读取和写入用户邮箱中任何项目的所有属性。”

在我的加载项中,我将权限级别设置为ReadWriteMailbox,并且使用从getCallbackTokenAsync返回的令牌来验证exchange service。但是,当我尝试将自定义属性写入Exchange服务器时,出现此错误Microsoft.Exchange.WebServices.Data.ServiceResponseException: 'The requested web method is unavailable to this caller or application.'

我的代码

exchangeService.Credentials = new OAuthCredentials({accesstoken returned by mailbox.getCallbackTokenAsync});
Guid PS_PUBLIC_STRINGS = new Guid("00020329-0000-0000-C000-000000000046");
ExtendedPropertyDefinition extendedPropertyDefinition = new ExtendedPropertyDefinition(PS_PUBLIC_STRINGS, "cecp-a8e14732-37cf-4a46-b69f-2539f4059948", MapiPropertyType.String);
var obj = new
{
 customProp: "cp"
 };
Email.SetExtendedProperty(extendedPropertyDefinition, JsonConvert.SerializeObject(obj));
Email.Update(ConflictResolutionMode.AlwaysOverwrite); //this erros occurs here

1 个答案:

答案 0 :(得分:1)

getCallbackTokenAsync提供的令牌只能用于此处记录的方法:https://docs.microsoft.com/en-us/outlook/add-ins/web-services

您可以参考以下链接,找到直接向EWS进行身份验证的方法:https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/authentication-and-ews-in-exchange

不建议直接通过EWS更新自定义属性,仅应将应用用于此目的。