EWS呼叫无法检索电子邮件,但仅针对特定电子邮件

时间:2012-05-09 12:30:43

标签: php exchangewebservices

  

发现问题:部分响应(消息正文)包含""   这是一个无效的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
}

所以我不知道为什么请求会失败。我尝试添加选项&#34;例外&#34; =&GT; 0,&#34;追踪&#34; =&GT; 1,我可以看到__last_response包含我所期望的响应。为什么即使我得到了正确的答案,它也会神秘失败?

1 个答案:

答案 0 :(得分:2)

我通过扩展我的SoapClient类并实现一个清除XML消息中无效字符的__doRequest方法来修复此问题。