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

在EWS-Java-API中获取邮件FlagType失败,仅能获取FlagStatus求助

问题分析与解决

你的代码里FlagType一直为null的核心原因是:EWS-Java-API默认不会返回所有扩展属性,你定义的taskFlagStatusProp(对应MAPI属性PidLidTaskFlagStatus,0x1090)没有被显式请求加载,所以item.getExtendedProperties()里根本没有这个属性,循环自然找不到匹配项。

另外还有两个小问题:

  • 获取FlagStatus的方式绕了弯路,直接用email.getFlagStatus()就能拿到,不用遍历Conversation
  • 代码里的"Nest week"是拼写错误,应该是"Next week"

修正后的代码实现

// 1. 定义需要的扩展属性:标记类型、开始日期、截止日期
ExtendedPropertyDefinition taskFlagStatusProp = new ExtendedPropertyDefinition(
        DefaultExtendedPropertySet.Common, 0x1090, MapiPropertyType.Integer);
ExtendedPropertyDefinition taskStartDateProp = new ExtendedPropertyDefinition(
        DefaultExtendedPropertySet.Common, 0x108D, MapiPropertyType.SystemTime);
ExtendedPropertyDefinition taskDueDateProp = new ExtendedPropertyDefinition(
        DefaultExtendedPropertySet.Common, 0x108E, MapiPropertyType.SystemTime);

// 2. 在获取邮件时,显式指定要加载的属性(包括扩展属性)
// 假设你是通过bind方式获取邮件,需传入PropertySet
PropertySet propertySet = new PropertySet(BasePropertySet.FirstClassProperties);
propertySet.add(taskFlagStatusProp);
propertySet.add(taskStartDateProp);
propertySet.add(taskDueDateProp);
EmailMessage email = EmailMessage.bind(service, itemId, propertySet);

// 如果是通过findItems批量获取,要给ItemView设置PropertySet:
// ItemView itemView = new ItemView(pageSize);
// itemView.setPropertySet(propertySet);
// FindItemsResults<Item> results = service.findItems(folderId, itemView);

// 直接获取FlagStatus,无需遍历Conversation
String flagged = email.getFlagStatus() != null ? email.getFlagStatus().toString() : null;

// 3. 获取FlagType及起止日期
String flagType = null;
Date startDate = null;
Date dueDate = null;

List<ExtendedProperty> extendedProperties = email.getExtendedProperties().getItems();
for (ExtendedProperty property : extendedProperties) {
    if (property.getPropertyDefinition().equals(taskFlagStatusProp)) {
        int flagStatus = (Integer) property.getValue();
        switch (flagStatus) {
            case 1:
                flagType = "Today";
                break;
            case 2:
                flagType = "Tomorrow";
                break;
            case 3:
                flagType = "This week";
                break;
            case 4:
                flagType = "Next week"; // 修正拼写错误
                break;
            case 5:
                flagType = "NoDate";
                break;
            default:
                flagType = "Unknown";
        }
    } else if (property.getPropertyDefinition().equals(taskStartDateProp)) {
        startDate = (Date) property.getValue();
    } else if (property.getPropertyDefinition().equals(taskDueDateProp)) {
        dueDate = (Date) property.getValue();
    }
}

System.out.println("FlagStatus: " + flagged);
System.out.println("FlagType: " + flagType);
if (startDate != null) {
    System.out.println("开始日期: " + startDate);
}
if (dueDate != null) {
    System.out.println("截止日期: " + dueDate);
}

关键说明

  • 必须显式在PropertySet中添加需要的扩展属性,EWS才会返回这些属性的值,否则getExtendedProperties()里不会包含它们
  • PidLidTaskFlagStatus(0x1090)的取值对应微软官方定义:1=Today,2=Tomorrow,3=This Week,4=Next Week,5=No Date,把default调整为对应5的情况更准确

内容的提问来源于stack exchange,提问作者이승규

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 19:37:23