2016-09-22 1 views
0

Exchange 서버에서 EWS를 사용하여 읽지 않은 메일을 가져 가고 있습니다. 아래는 출력입니다.EWS 메일의 출력에서 ​​변수 값을 가져오고 싶습니다.

stdClass Object ([ResponseMessages] => stdClass Object 
      ([FindItemResponseMessage] => stdClass Object 
    ([ResponseCode] => NoError 
     [ResponseClass] => Success 
     [RootFolder] => stdClass Object 
    ([Items] => stdClass Object 
    ([Message] => stdClass Object 
    ([ItemId] => stdClass Object 
    ([Id] => AAMkADllYWVjYjE3LWMzNWItNDczYy05YzllLWEzMzM2YWUzNDY3NQBGAAAAAAA3RNrc1+NeRYdPKpmLrF8OBwDmmObTCfhpSqYuvnMiDlrXAAAAFjg7AADmmObTCfhpSqYuvnMiDlrXAAD0o9sFAAA= 
     [ChangeKey] => CQAAABYAAADmmObTCfhpSqYuvnMiDlrXAAD0o+gX 
    ) 
     [Subject] => CR-1167-Approved 
     [Sensitivity] => Normal 
     [Size] => 2992 
     [DateTimeSent] => 2016-09-22T10:55:12Z 
     [DateTimeCreated] => 2016-09-22T10:55:13Z 
     [HasAttachments] => [IsAssociated] => [From] => stdClass Object 
     ([Mailbox] => stdClass Object 
     ([Name] => Basudev Kumar Sadhu (Assistant Manager, Technology) 
     [MailboxType] => OneOff 
     ) 
     ) 
     [IsRead] => 
     )) 
     [IndexedPagingOffset] => 1 
     [IncludesLastItemInRange] => 1 
     [TotalItemsInView] => 1 
     )))) 

이제이 출력에서 ​​값을 파싱하고 싶습니다. 이 출력에서 ​​제목과 이름을 캡처하고 싶습니다.

다음은 메일을 읽는 데 사용한 원래 코드입니다.

<?php 
require_once ('../mail3/php-ews-master/ExchangeWebServices.php'); 
require_once ('../mail3/php-ews-master/EWS_Exception.php'); 
require_once ('../mail3/php-ews-master/EWSType.php'); 
require_once ('../mail3/php-ews-master/NTLMSoapClient.php'); 

function __autoload($class_name) 
{ 
// Start from the base path and determine the location from the class name, 
$base_path = '../mail3/php-ews-master'; 
$include_file = $base_path . '/' . str_replace('_', '/', $class_name) . '.php'; 

return (file_exists($include_file) ? require_once $include_file : false); 
} 

//$message_id = ''; // Id of the email message 
$ews = new ExchangeWebServices("webmail.bkash.com", "cr.tool", "[email protected]",ExchangeWebServices::VERSION_2010); 


$request = new EWSType_FindItemType(); 
$itemProperties = new EWSType_ItemResponseShapeType(); 
$itemProperties->BaseShape = EWSType_DefaultShapeNamesType::DEFAULT_PROPERTIES; 
$itemProperties->BodyType = EWSType_BodyTypeResponseType::TEXT; 
$request->ItemShape = $itemProperties; 

$fieldType = new EWSType_PathToUnindexedFieldType(); 
$fieldType->FieldURI = 'message:IsRead'; 

$constant = new EWSType_FieldURIOrConstantType(); 
$constant->Constant = new EWSType_ConstantValueType(); 
$constant->Constant->Value = "0"; 

$IsEqTo = new EWSType_IsEqualToType(); 
$IsEqTo->FieldURIOrConstant = $constant; 
$IsEqTo->Path = $fieldType; 

$request->Restriction = new EWSType_RestrictionType(); 
$request->Restriction->IsEqualTo = new EWSType_IsEqualToType(); 
$request->Restriction->IsEqualTo->FieldURI = $fieldType; 
$request->Restriction->IsEqualTo->FieldURIOrConstant = $constant; 

$request->IndexedPageItemView = new EWSType_IndexedPageViewType(); 
$request->IndexedPageItemView->BasePoint = 'Beginning'; 
$request->IndexedPageItemView->Offset = 0; 

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

$request->Traversal = EWSType_ItemQueryTraversalType::SHALLOW; 

$result = new EWSType_FindItemResponseMessageType(); 
$result = $ews->FindItem($request); 

if ($result->ResponseMessages->FindItemResponseMessage->ResponseCode == 'NoError' && $result->ResponseMessages->FindItemResponseMessage->ResponseClass == 'Success'){ 

$count = $result->ResponseMessages->FindItemResponseMessage->RootFolder->TotalItemsInView; 

if($count > 0) { 
    echo $count . " email(s)"; 
    print_r($result); 

} else { 
    echo 'No email(s)'; 
} 

} 

?> 

답변

1

나는 등 많은 examples, 함께 제공 라이브러리 garethp/php-ews, 내 버전을 사용하는 것이 좋습니다 얼마나 get a list of mail items합니다. 그에

협력 코드는 대략

<?php 

require_once "vendor/autoload.php"; 

use garethp\ews\API\Type; 
use garethp\ews\MailAPI; 

$api = MailAPI::withUsernameAndPassword('server', 'username', 'password'); 
$mail = $api->getMailItems(); 

foreach ($mail as $mailItem) { 
    $mailItem = $api->getItem($mail->getItemId()); 
    $subject = $mailItem->getSubject(); 
    $body = (string) $mailItem->getBody(); 
} 
+0

변화는 나를 위해 일한이 라인과 같을 것이다 :'$는 MailItem = $ API->의 getItem ($ mailItem->주는 getItemId());' – user2092317

+0

야 Gareth, in sendmail.php 메일이 보내 졌는지 아닌지 어떻게 확인합니까? '$ return = $ api-> sendMail ($ message);' – user2092317

+1

서버가 오류를 반환하면 예외가 발생하고이를 포착 할 수 있습니다. 정상적인 응답이있는 경우 응답으로 응답을받을 수 있습니다. 내 추측 (비록 실패 할 테스트하지 않은, 나는 그것이 실패 할 때 확실하지 않다) 실패는 예외가 발생하게 될 것입니다 –