Итак, я использую библиотеку php-ews для подключения к моей учетной записи электронной почты Microsoft Office 365 Exchange для чтения электронных писем. Я успешно подключился к нему, и мне удалось получить список писем, которые мне нужны.PHP-EWS «Клиент Soap возвратил статус 404»
Теперь проблема в том, что я не могу получить тело сообщения. Читая документацию о веб-службах Exchange, он говорит, что тело не может быть получено с помощью FindItem(), только с GetItem(), и все в порядке.
Теперь проблема, которую я вижу, следующая: Я пробовал все возможные примеры, которые я мог найти об этом, и в коде нет никаких ошибок, он просто говорит: «Мыльный клиент возвратил статус 404».
Если кто-нибудь знает, где искать решение, скажите, пожалуйста.
EDIT:
$ews = new Client('outlook.office365.com/EWS/OData/Me/Inbox/Messages', '###', '###', ClientEWS::VERSION_2010_SP2);
$request = new FindItemType();
$request->ItemShape = new ItemResponseShapeType();
$request->ItemShape->BaseShape = DefaultShapeNamesType::DEFAULT_PROPERTIES;
$request->ItemShape->BodyType = BodyTypeResponseType::BEST;
$request->Traversal = ItemQueryTraversalType::SHALLOW;
$request->ParentFolderIds = new NonEmptyArrayOfBaseFolderIdsType();
$request->ParentFolderIds->DistinguishedFolderId = new DistinguishedFolderIdType();
$request->ParentFolderIds->DistinguishedFolderId->Id = DistinguishedFolderIdNameType::INBOX;
// sort order
$request->SortOrder = new NonEmptyArrayOfFieldOrdersType();
$request->SortOrder->FieldOrder = array();
$order = new FieldOrderType();
// sorts mails so that oldest appear first
// more field uri definitions can be found from types.xsd (look for UnindexedFieldURIType)
$order->FieldURI = new PathToUnindexedFieldType();
$order->FieldURI->FieldURI = 'item:DateTimeReceived';
$order->Order = 'Ascending';
$request->SortOrder->FieldOrder[] = $order;
try{
//getting list of all emails - works perfectly
$result = $ews->FindItem($request);
if ($result->ResponseMessages->FindItemResponseMessage->ResponseCode == 'NoError' && $result->ResponseMessages->FindItemResponseMessage->ResponseClass == 'Success') {
$count = $result->ResponseMessages->FindItemResponseMessage->RootFolder->TotalItemsInView;
$request = new GetItemType();
$request->ItemShape = new ItemResponseShapeType();
$request->ItemShape->BaseShape = DefaultShapeNamesType::ALL_PROPERTIES;
for ($i = 0; $i < $count; $i++){
$message_id = $result->ResponseMessages->FindItemResponseMessage->RootFolder->Items->Message[$i]->ItemId->Id;
$messageItem = new ItemIdType();
$messageItem->Id = $message_id;
$request->ItemIds->ItemId[] = $messageItem;
}
// Here is your response
// It throws an error here with the message "Soap client returned status of 404"
$response = $ews->GetItem($request);
print_r($response);
}
//print_r($result);
} catch(\Exception $e) {
echo $e->getMessage();
}
Пожалуйста, поделитесь некоторым кодом, чтобы люди могли видеть, что вы сделали до сих пор, и, возможно, найти, где проблема. –
@ jérôme Я добавил свой код, который я использую, есть несколько комментариев, чтобы вы могли видеть, что я делаю. – Imaginaroom