2016-09-22 8 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 
     )))) 

ここで、この出力から値を解析します。私は、この出力からSubjectとNameを取得したいと思います。

以下は、私がメールを読むのに使ったオリジナルのコードです。

<?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

私はどのようにget a list of mail itemsに含め、examples多くが付属して、そのライブラリgarethp/php-ews、私のバージョンを使用してお勧めします。その上

働いて、あなたのコードは、おおよそ

<?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、sendmail.phpでメールが送信されているかどうかを確認するには? '$ return = $ api-> sendMail($ message);' – user2092317

+1

サーバがエラーを返した場合、例外がスローされ、それを捕まえることができます。正常な応答がある場合は、返答として応答を得るためにベールになります。私の推測(私は送信失敗をテストしていませんが、いつ失敗するかわかりません)というのは、失敗すると例外がスローされるということです –

関連する問題