электронная почта — ошибка PHP-EWS Exchange 2010 на большом почтовом ящике

Я использую php-ews для чтения через почтовый ящик, который имеет более 1000 на Exchange 2010, у меня есть функция для отображения всех электронных писем с использованием EWSType_FindItemType, чтобы захватить все ключи ID и сохранить их в массиве, который у меня есть затем использовал цикл foreach этого массива для вызова другой функции для получения содержимого сообщения электронной почты, такого как тело и адреса электронной почты.

Я проверил это на гораздо меньшем почтовом ящике, и он отлично работает с двумя различными тестами, один на том же Exchange и один с Exchange 2013 на Microsoft 365.

Но я продолжаю получать эту ошибку, когда получаю около 300 писем в массив ключей от последнего вызова:

SoapFault exception: [Client] looks like we got no XML document in E:\Development\ExchangeInt\php-ews\ExchangeWebServices.php:17
Stack trace:
#0 E:\Development\ExchangeInt\php-ews\ExchangeWebServices.php(17): SoapClient->__call('GetItem', Array)
#1 E:\Development\ExchangeInt\php-ews\ExchangeWebServices.php(17): NTLMSoapClient_Exchange->GetItem(Object(EWSType_GetItemType))
#2 E:\Development\ExchangeInt\php-ews\ExchangeWebServices.php(694): ExchangeWebServices->__doRequest(Object(EWSType_GetItemType))
#3 E:\Development\ExchangeInt\mail.php(405): ExchangeWebServices->GetItem(Object(EWSType_GetItemType))
#4 E:\Development\ExchangeInt\mail.php(341): Message(Object(Folder), Object(User), 'AAMkAGEzOGJmNjg...')
#5 E:\Development\ExchangeInt\mail.php(800): listFolder(Object(Folder), Object(User))
#6 E:\Development\ExchangeInt\mail.php(99): getFolders(Object(User))
#7 E:\Development\ExchangeInt\exchange.php(38): User->mailboxes()
#8 {main}

Я действительно понятия не имею, что с этим делать, я продолжаю ходить по кругу, и некоторая помощь будет очень полезна.
Спасибо, парни

Мой код:
Список электронных писем и идентификаторов ключей —

$request = new EWSType_FindItemType();

$request->ItemShape = new EWSType_ItemResponseShapeType();
$request->ItemShape->BaseShape = EWSType_DefaultShapeNamesType::DEFAULT_PROPERTIES;

$request->Traversal = EWSType_ItemQueryTraversalType::SHALLOW;

// Limits the number of items retrieved
$request->IndexedPageItemView = new EWSType_IndexedPageViewType();
$request->IndexedPageItemView->BasePoint = "Beginning";
$request->IndexedPageItemView->Offset = 0; // Item number you want to start at
$request->IndexedPageItemView->MaxEntriesReturned = 500; // Numer of items to return in total

$request->ParentFolderIds = new EWSType_NonEmptyArrayOfBaseFolderIdsType();
$request->ParentFolderIds->DistinguishedFolderId = new EWSType_DistinguishedFolderIdType();
$request->ParentFolderIds->DistinguishedFolderId->Id = EWSType_DistinguishedFolderIdNameType::INBOX;

// sort order
$request->SortOrder = new EWSType_NonEmptyArrayOfFieldOrdersType();
$request->SortOrder->FieldOrder = array();
$order = new EWSType_FieldOrderType();

// sorts mails so that oldest appear first
// more field uri definitions can be found from types.xsd (look for UnindexedFieldURIType)
$order->FieldURI = '';
@$order->FieldURI->FieldURI = 'item:DateTimeReceived'; // @ symbol stops the creating default object from empty value error
$order->Order = 'Ascending';
$request->SortOrder->FieldOrder[] = $order;

$response = $ews->EX->FindItem($request);

//For Debugging
//die("<pre>" . print_r($arr, 1) . "</pre>");

if(!isset($response->ResponseMessages->FindItemResponseMessage->RootFolder))
{
$responseMessage = $response->ResponseMessages->FindItemResponseMessage;
die("<h3 style='text-align: center;'>Email</h3>" . $responseMessage->MessageText . "<br /><br />" . $responseMessage->ResponseCode);
}
else
{
$totalItems = $response->ResponseMessages->FindItemResponseMessage->RootFolder->TotalItemsInView;
}

$rootFolder = $response->ResponseMessages->FindItemResponseMessage->RootFolder;
$messages = $rootFolder->Items->Message;
$lastItemInRange = $rootFolder->IncludesLastItemInRange;
$i = 1; // Counter to multply the max etries retrurned, to create the offset value

while($lastItemInRange != 1) // While the last item in the inbox is still not in range retrieve the next 1000 messages
{
$limit = $request->IndexedPageItemView->MaxEntriesReturned;
$request->IndexedPageItemView->Offset = $limit * $i;
$response = $ews->EX->FindItem($request);

$rootFolder = $response->ResponseMessages->FindItemResponseMessage->RootFolder;
$messages = array_merge($messages, $rootFolder->Items->Message);
$lastItemInRange = $rootFolder->IncludesLastItemInRange;

$i++;
}

foreach($messages as $msg)
{
$arrID;
$arrID = $msg->ItemId->Id;
echo $arrID . "<br>";
Message($user, $ews, $arrID);
//echo print_r($msg);
}

die();

Функция сообщения:

function Message($user,$ews,$key) {
$email = new Email;
$email->ID = $key;

// Build the request for the parts.
$request = new EWSType_GetItemType();
$request->ItemShape = new EWSType_ItemResponseShapeType();
$request->ItemShape->BaseShape = EWSType_DefaultShapeNamesType::DEFAULT_PROPERTIES;

// You can get the body as HTML, text or "best".
$request->ItemShape->BodyType = EWSType_BodyTypeResponseType::TEXT;

// Add the body property.
$body_property = new EWSType_PathToUnindexedFieldType();
$body_property->FieldURI = 'item:Body';
$request->ItemShape->AdditionalProperties = new EWSType_NonEmptyArrayOfPathsToElementType();
$request->ItemShape->AdditionalProperties->FieldURI = array($body_property);

$request->ItemIds = new EWSType_NonEmptyArrayOfBaseItemIdsType();
$request->ItemIds->ItemId = array();

// Add the message to the request.
$message_item = new EWSType_ItemIdType();
$message_item->Id = $key;
$request->ItemIds->ItemId[] = $message_item;

$response = $ews->EX->GetItem($request);  <-- Breaks Here I Think

echo print_r($response);

return;
}

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]