<?php 
/** 
 * Composer autoload 
 */ 
require_once __DIR__ . '/../vendor/autoload.php'; 
 
/** 
 * Used classes 
 */ 
use WsdlToPhp\PackageBase\AbstractSoapClientBase; 
use Ews\EnumType\EwsExchangeVersionType; 
use Ews\EwsClassMap; 
use Ews\StructType\EwsFindItemType; 
use Ews\StructType\EwsItemResponseShapeType; 
use Ews\EnumType\EwsDefaultShapeNamesType; 
use Ews\StructType\EwsNonEmptyArrayOfBaseFolderIdsType; 
use Ews\EnumType\EwsDistinguishedFolderIdNameType; 
use Ews\EnumType\EwsItemQueryTraversalType; 
use Ews\StructType\EwsDistinguishedFolderIdType; 
use Ews\StructType\EwsRequestServerVersion; 
use Ews\StructType\EwsIsEqualToType; 
use Ews\StructType\EwsFieldURIOrConstantType; 
use Ews\StructType\EwsConstantValueType; 
use Ews\StructType\EwsRestrictionType; 
use Ews\StructType\EwsPathToUnindexedFieldType; 
use Ews\EnumType\EwsUnindexedFieldURIType; 
 
/** 
 * Your Office 365 login 
 */ 
define('EWS_WS_LOGIN', '***************************'); 
/** 
 * Your Office 365 passowrd 
 */ 
define('EWS_WS_PASSWORD', '************'); 
 
/** 
 * Minimal options in order to instanciate the ServiceType named Get 
 */ 
$options = array( 
    AbstractSoapClientBase::WSDL_URL => __DIR__ . '/../wsdl/services.updated.wsdl', 
    AbstractSoapClientBase::WSDL_CLASSMAP => EwsClassMap::get(), 
    AbstractSoapClientBase::WSDL_LOGIN => EWS_WS_LOGIN, 
    AbstractSoapClientBase::WSDL_PASSWORD => EWS_WS_PASSWORD, 
    AbstractSoapClientBase::WSDL_CACHE_WSDL => WSDL_CACHE_NONE, 
); 
 
/** 
 * Instanciation of the ServiceType get that gather all the operations beginnig with "get". 
 */ 
$find = new \Ews\ServiceType\EwsFind($options); 
$find->setLocation('https://pod51036.outlook.com/ews/Exchange.asmx'); 
/** 
 * Configure the SoapHeader, each header's method begins with "setSoapHeader". 
 */ 
$find->setSoapHeaderRequestServerVersion(new EwsRequestServerVersion(EwsExchangeVersionType::VALUE_EXCHANGE_2013_SP_1)); 
/** 
 * Send the request 
 */ 
$itemType = new EwsFindItemType(); 
$itemShape = new EwsItemResponseShapeType(EwsDefaultShapeNamesType::VALUE_ALL_PROPERTIES); 
$isEqualTo = new EwsIsEqualToType(); 
$isEqualTo 
    ->setFieldURIOrConstant(new EwsFieldURIOrConstantType(new EwsConstantValueType('0'))) 
    ->setFieldURI(new EwsPathToUnindexedFieldType(EwsUnindexedFieldURIType::VALUE_MESSAGE_IS_READ)); 
$restriction = new EwsRestrictionType(); 
$restriction->setIsEqualTo($isEqualTo); 
$itemType 
    ->setItemShape($itemShape) 
    ->setParentFolderIds(new EwsNonEmptyArrayOfBaseFolderIdsType(null, new EwsDistinguishedFolderIdType(EwsDistinguishedFolderIdNameType::VALUE_INBOX))) 
    ->setTraversal(EwsItemQueryTraversalType::VALUE_SHALLOW) 
    ->setRestriction($restriction); 
$result = $find->FindItem($itemType); 
 
/** 
 * Debug informations provided by the utility methods 
 */ 
if (false) { 
    echo 'XML Request: ' . $find->getLastRequest() . "\r\n"; 
    echo 'Headers Request: ' . $find->getLastRequestHeaders() . "\r\n"; 
    echo 'XML Response: ' . $find->getLastResponse() . "\r\n"; 
    echo 'Headers Response: ' . $find->getLastResponseHeaders() . "\r\n"; 
} 
 
if ($result !== false) { 
    /** 
     * Display the Inbox items if there is at least one: 
     * 
     * Message from "{name} <{email}>" with subject "{subject}" sent at "2017-02-03T20:51:20Z" 
     * Message from "{name} <{email}>" with subject "{subject}" sent at "2017-02-02T17:48:25Z" 
     * ... etc 
     */ 
    foreach($result->getResponseMessages()->getFindItemResponseMessage() as $message) { 
        $messages = $message->getRootFolder()->getItems()->getMessage(); 
        if (is_array($messages)) { 
            foreach($messages as $item) { 
                echo PHP_EOL . sprintf('Message from "%s <%s>" with subject "%s" sent at "%s"', 
                    $item->getFrom()->getMailbox()->getName(), 
                    $item->getFrom()->getMailbox()->getEmailAddress(), 
                    $item->getSubject(), 
                    $item->getDateTimeSent()); 
            } 
        } else { 
            echo PHP_EOL . 'No message found'; 
        } 
        echo  PHP_EOL; 
    } 
} else { 
    /** 
     * In this case, we get the \SoapFault object 
     */ 
    print_r($find->getLastErrorForMethod('\Ews\ServiceType\EwsFind::FindItem')); 
}
 
 |