9require_once(
'HTTPAuthSession.php');
12require_once(
'CalDAVRequest.php');
15if ( !isset($c->enable_autodiscover) || ! $c->enable_autodiscover ) {
16 $request->DoResponse( 404 );
20$ns_outlook_req_2006 =
"http://schemas.microsoft.com/exchange/autodiscover/outlook/requestschema/2006";
21$ns_exchange_resp_2006 =
"http://schemas.microsoft.com/exchange/autodiscover/responseschema/2006";
22$ns_outlook_resp_2006a =
"http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a";
24function errorResponse( $code, $message, $debugdata =
'' ) {
25 global $request, $ns_exchange_resp_2006;
27 $error_time_id = time();
28 $error_time = gmdate(
'h:i:s', $error_time_id);
30<?xml version=
"1.0" encoding=
"utf-8" ?>
31<Autodiscover xmlns=
"$ns_exchange_resp_2006">
33 <Error Time=
"$error_time" Id=
"$error_time_id">
34 <ErrorCode>$code</ErrorCode>
35 <Message>$message</Message>
36 <DebugData>$debugdata</DebugData>
42 $request->DoResponse( $code, $response,
'text/xml; charset="utf-8"' );
47if ( !isset($request->xml_tags) )
48 errorResponse( 406, translate(
"Body contains no XML data!") );
50$xmltree = BuildXMLTree( $request->xml_tags );
51if ( !is_object($xmltree) )
52 errorResponse( 406, translate(
"REPORT body is not valid XML data!") );
54$user_email = $xmltree->GetPath(
55'/'.$ns_outlook_req_2006.
':Autodiscover'.
56'/'.$ns_outlook_req_2006.
':Request'.
57'/'.$ns_outlook_req_2006.
':EMailAddress');
58if ( count($user_email) < 1 ) errorResponse(500,
"User not found.");
59$user_email = $user_email[0]->GetContent();
63$reply =
new XMLDocument( array( $ns_outlook_resp_2006a =>
"" ) );
65 new XMLElement(
'User',
67 new XMLElement(
'DisplayName', $principal->$fullname ),
68 new XMLElement(
'AutoDiscoverSMTPAddress',$user_email),
73$response[] =
new XMLElement(
'Account',
75 new XMLElement(
'AccountType',
'email' ),
76 new XMLElement(
'Action',
'settings'),
77 new XMLElement(
'Protocol',
79 new XMLElement(
'Type',
'DAV'),
80 new XMLElement(
'Server', $c->domain_name ),
81 new XMLElement(
'LoginName', $principal->username())
87$autodiscover =
new XMLElement(
"Autodiscover", $responses, $reply->GetXmlNsArray(), $ns_exchange_resp_2006 );
89$request->XMLResponse( 207, $autodiscover );