Веб-служба Exchange получает открытую подпапку с помощью PHP-EWS

Я использую PHP-EWS (https://github.com/jamesiarmes/php-ews) внутри приложения CakePHP. Цель состоит в том, чтобы читать электронные письма из «Общей папки» с сервера обмена.

Проблема в том, что я могу только прочитать первое «Измерение» общих папок и не могу найти способ получить подкаталоги.

Папка, из которой я должен прочитать, имеет 4 уровня.

 $this->connect();

// start building the find folder request
$request = new FindFolderType();
$request->Traversal = FolderQueryTraversalType::SHALLOW;
$request->FolderShape = new FolderResponseShapeType();
$request->FolderShape->BaseShape = DefaultShapeNamesType::ALL_PROPERTIES;

// configure the view
$request->IndexedPageFolderView = new IndexedPageViewType();
$request->IndexedPageFolderView->BasePoint = 'Beginning';
$request->IndexedPageFolderView->Offset = 0;

// set the starting folder
$request->ParentFolderIds = new NonEmptyArrayOfBaseFolderIdsType();
$request->ParentFolderIds->DistinguishedFolderId = new    DistinguishedFolderIdType();
$request->ParentFolderIds->DistinguishedFolderId->Id = DistinguishedFolderIdNameType::PUBLIC_FOLDERS_ROOT;

// request
$response = $this->ews->FindFolder($request);

Если я изменю «Обход» на ГЛУБОКИЙ, я получаю ошибку.

Запросы DEEP TRAVERSAL не разрешены для общих папок.

Я тоже пытался изменить

$request->IndexedPageFolderView->BasePoint

К таким вещам, как «конец», «второй», это ничего не изменило, поэтому я не мог понять, что он делает и как его использовать.

Я не могу получить идентификатор папки подкаталога (для изменения начальной точки), потому что он никогда не выбирается.

Спасибо за помощь.

0

Решение

Очень хороший вопрос К сожалению, выбранная вами библиотека устарела и не поддерживается. Я лично предложил бы вам использовать мой более современный, garethp/php-ews.

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

- Folder 1
- Subfolder 1
- Subfolder 2
- Subfolder 3 (Target)
- Folder 2
- Folder 3

Тогда сначала вы получите папку 1, которая будет дочерним DistinguishedFolderIdNameType::PUBLIC_FOLDERS_ROOT, Тогда вы получите Subfolder 1 который был бы ребенком Folder 1, тогда получите Subfolder 2, затем Subfolder 3, Я не могу посоветовать вам, как вы будете управлять этим с библиотекой, которую вы используете в настоящее время, но с моей это будет выглядеть примерно так

$api = MailAPI::withUsernameAndPassword($host, $username, $password);
$folder1 = $api->getFolderByDisplayName('Folder1', Enumeration\DistinguishedFolderIdNameType::PUBLICFOLDERSROOT);
$subFolder1 = $api->getFolderByDisplayName('Subfolder1', $folder1->getFolderId());
$subFolder2 = $api->getFolderByDisplayName('Subfolder2', $subfolder1->getFolderId());
$subFolder3 = $api->getFolderByDisplayName('Subfolder3', $subfolder2->getFolderId());
$api->setFolderId($subFolder3->getFolderId());

Очевидно, что это много вызовов, поэтому, если вы часто используете этот идентификатор папки, я бы сохранил FolderID в базе данных для более быстрого поиска позже

1

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

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

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