php-ews获取对话邮件UniqueBody为空,求正确实现方式
解决php-ews获取邮件UniqueBody为空的问题
你当前代码的问题在于错误地将UniqueBody属性设置在了ItemType实例上,正确的做法是通过ItemResponseShapeType的AdditionalProperties来指定需要返回UniqueBody字段。
修正后的请求代码
$request = new GetItemType(); $request->ItemShape = new ItemResponseShapeType(); // 保持BaseShape为ALL_PROPERTIES,也可根据需求调整为IdOnly/Default $request->ItemShape->BaseShape = DefaultShapeNamesType::ALL_PROPERTIES; // 创建要添加的额外字段:UniqueBody $uniqueBodyField = new PathToUnindexedFieldType(); $uniqueBodyField->FieldURI = ItemSchema::UniqueBody; // 初始化AdditionalProperties并添加UniqueBody字段 $request->ItemShape->AdditionalProperties = new NonEmptyArrayOfPathsToElementType(); $request->ItemShape->AdditionalProperties->FieldURIOrIndexedFieldURIOrExtendedFieldURI[] = $uniqueBodyField; // 设置邮件ID $request->ItemIds = new NonEmptyArrayOfBaseItemIdsType(); $item = new ItemIdType(); $item->Id = 'MessageId'; $request->ItemIds->ItemId[] = $item; $response = $client->GetItem($request);
补充说明
- 若修正后UniqueBody仍为空,大概率是该邮件不属于对话内容(非回复/转发邮件),此时UniqueBody字段会与Body内容一致或返回空值,这是Exchange的正常行为。
- 若你的php-ews版本不支持
ItemSchema::UniqueBody常量,可直接使用字符串值:'item:UniqueBody'。
内容的提问来源于stack exchange,提问作者JustBaron
相关产品推荐
相关产品推荐

