Für Mailserverbetreiber: Outlook automatisch konfigurieren

In meinem letzten Eintrag ging es darum, wie man den E-Mailassistenten von Thunderbird automatisch mit den richtigen Einstellungen für den eigenen Mailserver ausstattet. Im folgenden wollen wir das selbe für Outlook (getestet mit der 2010er Version) erstellen.

Eine komplette Anleitung über alle Möglichkeiten der automatischen Konfiguration hat Microsoft hier veröffentlicht:
http://office.microsoft.com/download/afile.aspx?AssetID=AM102105061033

Ich habe mich für den Weg entschieden, der dem für Thunderbird am ähnlichsten ist.

Die Schritte:

  1. Anlegen eines DNS-Namen:  autodiscover.<domainname> (in diesem Beispiel: autodiscover.mein-edv-blog.de)
  2. Konfigurieren eines Webserver auf diesen DNS-Eintrag zu reagieren (in diesem Beispiel: apache2)
  3. Der Webserver braucht ein gültiges SSL-Zertifikat
  4. Dort muss eine spezielle xml-Datei unter dem Pfad /autodiscover/autodiscover.xml vorhanden sein

Sofern der Loginname gleich der E-Mailadresse ist, muss nichts weiter konfiguriert werden.

Ist der Loginname nicht mit der E-Mailadresse identisch, muss in der XML-Datei dafür gesorgt werden, dass der Loginname zu der E-Mailadresse rausgesucht wird. Die E-Mailadresse wird in einem Post verb bei der Anfrage von Outlook mit übermittelt und sieht z.B. so aus:

<!-- REQUEST TO SERVER. In HTTP POST DATA -->
<?xml version="1.0" encoding="utf-8" ?>
<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/requestschema/2006">
<Request>
<AcceptableResponseSchema>http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a</AcceptableResponseSchema>
 
<!-- EMailAddress: Optional
This tag indicates the user’s email address.
-->
<EMailAddress>harald.popke@mein-edv-blog.de</EMailAddress>
</Request>
</Autodiscover>

Mein Problem war nun mit PHP an die dort gespeicherte E-Mailadresse zu kommen. Im $_POST-Array von PHP stand leider nichts drin. Die Informationen erhält man aber, wenn man die Funktion ‚file_get_contents(‚php://input‘)‘ aufruft.
Folgendes PHP-Skript nimmt die XML-Anfrage von Outlook entgegen und sucht zu der E-Mailadresse den passenden Loginnamen aus einer LDAP-Datenbank raus:

Achtung: der Dateiname muss autodiscover.xml lauten!

<? header("Content-type: text/xml"); ?>
<?
//Lese den Body der XML-Anfrage von Outlook aus
$xmlObj = simplexml_load_string(file_get_contents('php://input'));
//Suche in der XML-Antwort die E-Mailadresse raus
$arraydata = (array) $xmlObj;
$arraydata = (array) $arraydata["Request"];
$email = $arraydata["EMailAddress"];
 
$ds=ldap_connect("adressen.mein-edv-blog.de");
if ($ds) {
//Eine gültige Kennung besteht aus der vom LDAP gelieferten UID gefolgt von einem + und der Domäne der E-Mail 
//Beispiel: E-Mail: harald.popke@mein-edv-blog.de 
//Antwort vom LDAP-Server: uid = hp1123, mail = harald.popke@mein-edv-blog.de 
//die Kennung lautet dann hp1123+mein-edv-blog.de 
 
    $r=ldap_bind($ds);
        $sr=ldap_search($ds, 'o=internet',"mail=".$email,array("uid","mail"));
    $info = ldap_get_entries($ds, $sr);
        $uid = $info[0]['uid'][0];
        $domain = substr(strstr($info[0]['mail'][0],'@'),1);
        $kennung = "$uid+$domain";
        if(strlen($kennung)==1){
                $kennung = "";
        }
        ldap_close($ds);
}
?>
<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/responseschema/2006">
        <Response xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a">
                <Account>
                        <AccountType>email</AccountType>
                        <Action>settings</Action>
                        <Protocol>
                                <Type>IMAP</Type>
                                <Server>mailbox.mein-edv-blog.de</Server>
                                <Port>993</Port>
                                <LoginName><? echo $kennung ?></LoginName>
                                <DomainRequired>off</DomainRequired>
                                <SPA>off</SPA>
                                <SSL>on</SSL>
                                <AuthRequired>on</AuthRequired>
                        </Protocol>
                        <Protocol>
                                <Type>SMTP</Type>
                                <Server>relay.mein-edv-blog.de</Server>
                                <Port>465</Port>
                                <LoginName><? echo $kennung ?></LoginName>
                                <DomainRequired>off</DomainRequired>
                                <SPA>off</SPA>
                                <SSL>on</SSL>
                                <AuthRequired>on</AuthRequired>
                        </Protocol>
                </Account>
        </Response>
</Autodiscover>

Damit der PHP-Parser diese XML-Datei abarbeitet, steht in der vhost-Directive als gültige Erweiterung für PHP-Dateien noch:

AddType application/x-httpd-php .xml

vor dem schließenden VirtualHost Tag.

Tipp zum Testen:

Per „Strg+rechte Maustaste“ auf das Outlookicon neben der Uhr klicken und „E-Mail-AutoKonfiguration testen“ auswählen.