在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,提问作者이승규
相关产品推荐
相关产品推荐

