after two disappointing days, I give up. I have one virtual maschine "admx" with Win2012R2 + Exchange 2013 (Trailversion) and one virtual maschine "web server" with IIS-Webserver + PHP.
Make a new subscription - sub.php:
<?PHP
function __autoload($class_name)
{
$base_path = 'php-ews';
$include_file = $base_path . '/' . str_replace('_', '/', $class_name) . '.php';
return (file_exists($include_file) ? require_once $include_file : false);
}
$server = "admx";
$host = $server;
$username = "administrator@testdom.local";
$password = "secret123";
$version = "Exchange2013";
$url = "http://webserver/testexchange/log.php";
$keepAliveFrequency = 1;
$ews = new ExchangeWebServices($server, $username, $password, $version);
$subscribe_request = new EWSType_SubscribeType();
$pushSubscription = new EWSType_PushSubscriptionRequestType();
$pushSubscription->StatusFrequency = $keepAliveFrequency;
$pushSubscription->URL = $url;
$folderIDs = new EWSType_NonEmptyArrayOfBaseFolderIdsType();
$eventTypes = new EWSType_NonEmptyArrayOfNotificationEventTypesType();
$folderIDs->DistinguishedFolderId = new EWSType_DistinguishedFolderIdType();
$folderIDs->DistinguishedFolderId->Id = EWSType_DistinguishedFolderIdNameType::INBOX;
$eventTypes->EventType = "NewMailEvent";
$pushSubscription->FolderIds = $folderIDs;
$pushSubscription->EventTypes = $eventTypes;
$subscribe_request->PushSubscriptionRequest = $pushSubscription;
$response = $ews->Subscribe($subscribe_request);
var_dump($response);
?>
Conclusion:
object(stdClass)#10 (1) { ["ResponseMessages"]=> object(stdClass)#11 (1) { ["SubscribeResponseMessage"]=> object(stdClass)#12 (4) { ["ResponseCode"]=> string(7) "NoError" ["ResponseClass"]=> string(7) "Success" ["SubscriptionId"]=> string(64) "EgBhZG14LnRlc3Rkb20ubG9jYWwQAAAA3keYE/U5Mkacz2FAg6DfHKdXyqelf9II" ["Watermark"]=> string(40) "AQAAAF57K7d1ihJLl9odwZ02gVahGgAAAAAAAAA=" } } }
So, the subscription has been successfully registered. Here is the listener - log.php
<?PHP
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ns1=\"http://schemas.microsoft.com/exchange/services/2006/messages\">
<SOAP-ENV:Body>
<ns1:SendNotificationResult>
<ns1:SubscriptionStatus>OK</ns1:SubscriptionStatus>
</ns1:SendNotificationResult>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>";
file_put_contents("C:\\exlog\\only_ok_".time().".txt", print_r($_REQUEST,1));
?>
Now I get every minute (because $ keepAliveFrequency = 1;) a new respone / StatusCheck with Exchange-Server. When I send eMail to administrator@testdom.local , I also get a new notification (because "NewMailEvent" in the inbox). I confirm this with OK as XML to save the subscription ... So far so good.
(only_ok_1435488594.txt) ...
Array()
log.php -:
<?PHP
class ewsService {
public function SendNotification( $arg ) {
file_put_contents("C:\\exlog\\logfile2_".time().".txt", print_r($arg,1));
$result = new EWSType_SendNotificationResultType();
$result->SubscriptionStatus = 'OK';
return $result;
}
}
$server = new SoapServer( 'php-ews/wsdl/NotificationService.wsdl', array( 'uri' => 'http://webserver/testexchange/log.php'));
$server->setObject( $service = new ewsService() );
$server->handle();
?>
, "array()":
stdClass Object
(
[ResponseMessages] => stdClass Object
(
[SendNotificationResponseMessage] => stdClass Object
(
[ResponseCode] => NoError
[ResponseClass] => Success
[Notification] => stdClass Object
(
[SubscriptionId] => EgBhZG14LnRlc3Rkb20ubG9jYWwQAAAAvfY+2ehqCEOXroWYNAsn+mD+ZBQYf9II
[PreviousWatermark] => AQAAAF57K7d1ihJLl9odwZ02gVZNGAAAAAAAAAA=
[MoreEvents] =>
[StatusEvent] => stdClass Object
(
[Watermark] => AQAAAF57K7d1ihJLl9odwZ02gVZNGAAAAAAAAAA=
)
)
)
)
)
:
3 . MSDN, , Exchangeserver 3 , "OK" .
NotificationService.wsdl GoogleSearch.
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" targetNamespace="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import namespace="http://schemas.microsoft.com/exchange/services/2006/messages" schemaLocation="messages.xsd"/>
</xs:schema>
</wsdl:types>
<wsdl:message name="SendNotificationSoapIn">
<wsdl:part name="request" element="tns:SendNotification" />
</wsdl:message>
<wsdl:message name="SendNotificationSoapOut">
<wsdl:part name="SendNotificationResult" element="tns:SendNotificationResult" />
</wsdl:message>
<wsdl:portType name="NotificationServicePortType">
<wsdl:operation name="SendNotification">
<wsdl:input message="tns:SendNotificationSoapIn" />
<wsdl:output message="tns:SendNotificationSoapOut" />
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="NotificationServiceBinding" type="tns:NotificationServicePortType">
<wsdl:documentation>
<wsi:Claim conformsTo="http://ws-i.org/profiles/basic/1.0" xmlns:wsi="http://ws-i.org/schemas/conformanceClaim/" />
</wsdl:documentation>
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
<wsdl:operation name="SendNotification">
<soap:operation soapAction="http://schemas.microsoft.com/exchange/services/2006/messages/SendNotification" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="NotificationServiceBinding12" type="tns:NotificationServicePortType">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
<wsdl:operation name="SendNotification">
<soap12:operation soapAction="http://schemas.microsoft.com/exchange/services/2006/messages/SendNotification" />
<wsdl:input>
<soap12:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="NotificationServices">
<wsdl:port name="NotificationServicePort" binding="tns:NotificationServiceBinding">
<soap:address location="" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
, " "
<wsdl:service name="NotificationServices">
<wsdl:port name="NotificationServicePort" binding="tns:NotificationServiceBinding">
<soap:address location="" />
</wsdl:port>
</wsdl:service>
SOAP... ?