0

发现问题:部分响应(消息正文)包含“” 这是一个无效的 XML 字符。知道如何删除它吗?

我正在使用 Exchange Web 服务从收件箱中提取大量电子邮件。它适用于前 1141 封电子邮件,但在 1142 上失败了(跳到 1143 可以正常工作)。我不知道为什么它无法检索电子邮件,但我得到的错误是:

Uncaught SoapFault exception: [Client] looks like we got no XML document 

我将响应 XML 输出到 1142 和 1143 的文件,唯一的区别是 ItemId 行(如预期的那样)。

该电子邮件确实存在于收件箱中,尽管它包含一些奇怪的字符(由那些奇怪的方形符号表示)。

我正在使用稍微修改过的 php-ews 库版本。这是我的代码的一部分:

<?php
$response = $ews->FindItem($Request);
$items = $response->ResponseMessages->FindItemResponseMessage->RootFolder->Items->Message;

foreach ( $items as $item ) {
    $ItemRequest = new EWSType_FindItemType();

    $ItemRequest->ItemShape = new EWSType_ItemResponseShapeType();
    $ItemRequest->ItemShape->BaseShape = EWSType_DefaultShapeNamesType::ALL_PROPERTIES;
    $ItemRequest->ItemShape->BodyType = EWSType_BodyTypeResponseType::TEXT;
    $ItemRequest->ItemShape->BodyTypeSpecified = true;

    $ItemRequest->ItemIds = new EWSType_NonEmptyArrayOfBaseItemIdsType();
    $ItemRequest->ItemIds->ItemId = new EWSType_ItemIdType();
    $ItemRequest->ItemIds->ItemId->Id = $item->ItemId->Id;

    $response = $ews->GetItem( $ItemRequest ); // Code fails here
}

所以我不知道为什么请求会失败。我尝试添加选项“exceptions”=> 0、“trace”=> 1,并且我可以看到 __last_response 确实包含我预期的响应。为什么即使我得到了正确的响应,它还是神秘地失败了?

4

1 回答 1

2

我通过扩展我的 SoapClient 类并实现 __doRequest 方法解决了这个问题,该方法从 XML 消息中清除了无效字符。

于 2012-05-09T13:19:37.353 回答