From edf137a7d0a15f5b63f50392aad9927f043bf53c Mon Sep 17 00:00:00 2001 From: Adam Spragg Date: Mon, 4 Oct 2021 09:40:04 +0100 Subject: First working version of emailautoconf --- php/outlook.php | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 php/outlook.php (limited to 'php/outlook.php') diff --git a/php/outlook.php b/php/outlook.php new file mode 100644 index 0000000..f6edba6 --- /dev/null +++ b/php/outlook.php @@ -0,0 +1,114 @@ +. +// +// SPDX-License-Identifier: LGPL-3.0-or-later + +// Outlook autoconfiguration described at: +// https://docs.microsoft.com/en-us/previous-versions/office/office-2010/cc511507(v=office.14) +// +// Should be installed at: +// https://[domain]/autodiscover/autodiscover.xml +// https://autodiscover.[domain]/autodiscover/autodiscover.xml + +if ($_SERVER['REQUEST_URI'] == "/autodiscover/autodiscover.xml" + && preg_match('/^autodiscover\.(.*)$/', $_SERVER['HTTP_HOST'], $matches)) +{ + $domain = $matches[1]; +} +else if ($_SERVER['REQUEST_URI'] == "/autodiscover/autodiscover.xml") { + $domain = $_SERVER['HTTP_HOST']; +} +else { + http_response_code(500); + header('Content-Type: text/plain'); + echo "Unable to determine email domain from //".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; + exit(1); +} + +$IMAP = dns_get_record("_imaps._tcp.".$domain, DNS_SRV) + ?: dns_get_record("_imap._tcp.".$domain, DNS_SRV); +$SMTP = dns_get_record("_submission._tcp.".$domain, DNS_SRV); + +if (!$IMAP || !$SMTP) { + http_response_code(500); + header('Content-Type: text/plain'); + if (!$IMAP) { + echo "Missing/unavailable IMAP(S) SRV record for ".$domain; + } + if (!$SMTP) { + echo "Missing/unavailable Submission SRV record for ".$domain; + } + exit(1); +} + +$sitename = getenv("EMAIL_SITENAME") ?: $domain; +$shortname = getenv("EMAIL_SHORTNAME") ?: $sitename; + +if (($xml = simplexml_load_string(file_get_contents('php://input'))) != false + && $xml->registerXPathNamespace('a', + 'http://schemas.microsoft.com/exchange/autodiscover/outlook/requestschema/2006') + && ($emails = $xml->xpath("/a:Autodiscover/a:Request/a:EMailAddress")) != false + && $emails != null + && count($emails) == 1 + && preg_match("/^([^@]*)@([^@]*)$/", $emails[0], $parts)) +{ + $login = $parts[1]; +} +else { + $login = ""; +} + +header('Content-Type: application/xml'); +?> + + + + + + + + email + settings + + + IMAP + + + off + off + on + on + + + + + + SMTP + + + off + off + on + on + + + + + + -- cgit v1.2.1