You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用Graph API清除邮件的MultiValueExtendedProperty?

问题

已通过谷歌、Stack Overflow等渠道大量搜索,但仍未找到使用Graph API更新邮件以移除MultiValueExtendedProperty的方法。此前使用EWS时,对象具备RemoveExtendedProperty函数,而在Graph API中,我无法找到删除、清除或移除MultiValueExtendedProperty的方式。由于EWS登录系统发生变更,必须切换至Graph API,请问如何实现该需求?

示例代码片段

var gmc = new GraphMailClient(auth);

var account = "someemailaccount@yourdomain.com";
var idval = "somemessageidyoucanlookupandedit";

var start = await gmc.Users[account].Messages[idval].Request().GetAsync();

start.MultiValueExtendedProperties = new MessageMultiValueExtendedPropertiesCollectionPage()
{
    new MultiValueLegacyExtendedProperty() { Id  = "StringArray {66f5a359-4659-4830-9070-00049ec6ac6e} Name MVE1", Value = new string[] { "test" } },
    new MultiValueLegacyExtendedProperty() { Id  = "StringArray {66f5a359-4659-4830-9070-00049ec6ac6e} Name MVE2", Value = new string[] { DateTime.Now.AddMinutes(3).ToString() } }
};
var saveDraftId = await gmc.SaveDraftAsync(account, start);
var entry = await gmc.Users[account].Messages[idval].Request().Expand("multiValueExtendedProperties($filter = id eq 'StringArray {66f5a359-4659-4830-9070-00049ec6ac6e} Name MVE1' or id eq 'StringArray {66f5a359-4659-4830-9070-00049ec6ac6e} Name MVE2'), attachments").GetAsync();

entry.MultiValueExtendedProperties.RemoveAt(0);
entry.MultiValueExtendedProperties.Clear();

var result = await gmc.Users[account].Messages[idval].Request().Expand("multiValueExtendedProperties($filter = id eq 'StringArray {66f5a359-4659-4830-9070-00049ec6ac6e} Name MVE1' or id eq 'StringArray {66f5a359-4659-4830-9070-00049ec6ac6e} Name MVE2'), attachments").UpdateAsync(entry);
var entryAgain = await gmc.Users[account].Messages[idval].Request().Expand("multiValueExtendedProperties($filter = id eq 'StringArray {66f5a359-4659-4830-9070-00049ec6ac6e} Name MVE1' or id eq 'StringArray {66f5a359-4659-4830-9070-00049ec6ac6e} Name MVE2'), attachments").GetAsync(); 

if(entryAgain.MultiValueExtendedProperties.Any())
    Console.WriteLine("Failed");
解决方案

Graph API中没有直接的"移除"扩展属性方法,但可以通过将目标MultiValueExtendedProperty的Value设置为空数组来实现清除效果,具体操作如下:

使用Graph SDK实现

不需要调用Clear()或RemoveAt(),而是重新构建MultiValueExtendedProperties集合,将需要删除的属性的Value设为空数组,然后执行更新:

var entry = await gmc.Users[account].Messages[idval].Request()
    .Expand("multiValueExtendedProperties($filter = id eq 'StringArray {66f5a359-4659-4830-9070-00049ec6ac6e} Name MVE1' or id eq 'StringArray {66f5a359-4659-4830-9070-00049ec6ac6e} Name MVE2')")
    .GetAsync();

// 构建要更新的属性集合,将需要清除的属性Value设为空数组
entry.MultiValueExtendedProperties = new MessageMultiValueExtendedPropertiesCollectionPage()
{
    new MultiValueLegacyExtendedProperty() 
    { 
        Id = "StringArray {66f5a359-4659-4830-9070-00049ec6ac6e} Name MVE1", 
        Value = Array.Empty<string>() // 空数组清除该属性
    },
    new MultiValueLegacyExtendedProperty() 
    { 
        Id = "StringArray {66f5a359-4659-4830-9070-00049ec6ac6e} Name MVE2", 
        Value = Array.Empty<string>() 
    }
};

// 执行更新
var result = await gmc.Users[account].Messages[idval].Request().UpdateAsync(entry);

// 验证结果
var entryAgain = await gmc.Users[account].Messages[idval].Request()
    .Expand("multiValueExtendedProperties($filter = id eq 'StringArray {66f5a359-4659-4830-9070-00049ec6ac6e} Name MVE1' or id eq 'StringArray {66f5a359-4659-4830-9070-00049ec6ac6e} Name MVE2')")
    .GetAsync(); 

if(!entryAgain.MultiValueExtendedProperties.Any(p => p.Value.Any()))
    Console.WriteLine("Success");

核心原理

Graph API的PATCH更新遵循部分更新逻辑,当你指定某个MultiValueExtendedProperty的Value为空数组时,服务端会将该属性的现有值清空,达到类似EWS中RemoveExtendedProperty的效果。若需要完全删除属性条目,只需在请求中包含目标属性ID且Value设为空数组即可。


内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 06:04:51