2016-06-14 4 views
0

메신저 cakePHP 응용 프로그램에서 PHP-EWS (https://github.com/jamesiarmes/php-ews)를 사용합니다. 목표는 교환 서버에서 "공용 폴더"의 전자 메일을 읽는 것입니다.Exchange 웹 서비스는 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에 "순회"를 변경하면 내가

넓은 통과 쿼리 공용 폴더에 허용되지 않는 오류가 발생합니다.

는 나 또한 내가 그 기능과 사용 방법에 대해 알 수없는, 그래서는 아무것도 변경하지 않았다 "초", "종료"같은 것들에

$request->IndexedPageFolderView->BasePoint 

을 변경했습니다.

결코 선택되지 않기 때문에 하위 폴더 Folder ID (시작점을 chaning하기)를 가져올 수 없습니다.

도움 주셔서 감사합니다.

답변

1

아주 좋은 질문입니다. 불행히도 선택한 라이브러리가 오래되어 유지 보수가되지 않습니다. 나는 개인적으로 당신이 내 최신 하나를 사용하도록 제안 할 것입니다, garethp/php-ews.

이것이 최선의 해결책인지 잘 모르겠지만 첫 번째 수준의 폴더를 얻은 다음 두 번째 등을 제안하는 것이 좋습니다. 당신이 당신의 폴더의 디렉토리 구조를 알고, 그것을이

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

같은 것을 보았다한다면 먼저 당신은 DistinguishedFolderIdNameType::PUBLIC_FOLDERS_ROOT의 자녀가 될 폴더 하나를 얻을 것입니다. 그런 다음 Folder 1의 자식이 될 Subfolder 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

안녕하세요 가레스, 당신의 API를 가진 폴더를 얻을 수 있지만 내가 항목을 검색 할 경우 나는 sopa 오류 (개체에 상수 속성이 없습니다) $ api-> getMailItems ($ subFolder-> array ('Restriction'=> 배열 ('포함'=> '배열 ('FieldURI '=> $ 검색 문자열)))); – M41DZ3N

관련 문제