2016-06-14 5 views
0

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

Проблема в том, что я могу читать только первый «размер» общих папок и не могу найти способ получить подкаталоги. Папка, которую я должен прочитать, - это 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 я получаю ошибку

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

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

$request->IndexedPageFolderView->BasePoint 

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

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

Благодарим за помощь.

ответ

1

Очень хороший вопрос. К сожалению, библиотека, которую вы выбрали, устарела и не поддерживается. Я лично предлагаю вам использовать мой более современный, 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()); 

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

+0

Могу ли я использовать ваш forke без композитора? – M41DZ3N

+0

Если вы пишете автозагрузчик, обязательно. Но я бы рекомендовал просто использовать композитор –

+0

Hey Gareth, мне удалось получить папку с вашим API, но если я ищу элементы, которые я запускаю в ошибку sopa (объект не имеет свойства константы) $ api-> getMailItems ($ subFolder-> getFolderId(), array ('Restriction' => array ('contains' => 'array (' FieldURI '=> $ searchstring)))); – M41DZ3N

Смежные вопросы