diff --git a/data/web/autoconfig.php b/data/web/autoconfig.php
index d01bc724..523d6183 100644
--- a/data/web/autoconfig.php
+++ b/data/web/autoconfig.php
@@ -5,6 +5,16 @@ if (empty($mailcow_hostname)) {
exit();
}
+$domain_dot = strpos($_SERVER['HTTP_HOST'], '.');
+$domain_port = strpos($_SERVER['HTTP_HOST'], ':');
+if ($domain_port === FALSE) {
+ $domain = substr($_SERVER['HTTP_HOST'], $domain_dot+1);
+ $port = 443;
+} else {
+ $domain = substr($_SERVER['HTTP_HOST'], $domain_dot+1, $domain_port-$domain_dot-1);
+ $port = substr($_SERVER['HTTP_HOST'], $domain_port+1);
+}
+
header('Content-Type: application/xml');
?>
= ''; ?>
@@ -15,52 +25,59 @@ header('Content-Type: application/xml');
mail server
- = $mailcow_hostname; ?>
- 993
+ = $autodiscover_config['imap']['server']; ?>
+ = $autodiscover_config['imap']['port']; ?>
SSL
%EMAILADDRESS%
password-cleartext
- = $mailcow_hostname; ?>
- 143
+ = $autodiscover_config['imap']['server']; ?>
+ = $autodiscover_config['imap']['tlsport']; ?>
STARTTLS
%EMAILADDRESS%
password-cleartext
+
- = $mailcow_hostname; ?>
- 995
+ = $autodiscover_config['pop3']['server']; ?>
+ = $autodiscover_config['pop3']['port']; ?>
SSL
%EMAILADDRESS%
password-cleartext
+
+
- = $mailcow_hostname; ?>
- 110
+ = $autodiscover_config['pop3']['server']; ?>
+ = $autodiscover_config['pop3']['tlsport']; ?>
STARTTLS
%EMAILADDRESS%
password-cleartext
+
- = $mailcow_hostname; ?>
- 465
+ = $autodiscover_config['smtp']['server']; ?>
+ = $autodiscover_config['smtp']['port']; ?>
SSL
%EMAILADDRESS%
password-cleartext
-
- = $mailcow_hostname; ?>
- 587
+ = $autodiscover_config['smtp']['server']; ?>
+ = $autodiscover_config['smtp']['tlsport']; ?>
STARTTLS
%EMAILADDRESS%
password-cleartext
-
+
If you didn't change the password given to you by the administrator or if you didn't change it in a long time, please consider doing that now.
Sollten Sie das Ihnen durch den Administrator vergebene Passwort noch nicht geändert haben, empfehlen wir dies nun zu tun. Auch ein altes Passwort sollte aus Sicherheitsgründen geändert werden.
@@ -68,6 +85,6 @@ header('Content-Type: application/xml');
-
+
diff --git a/data/web/autodiscover.php b/data/web/autodiscover.php
index fd8cd641..7f6081ae 100644
--- a/data/web/autodiscover.php
+++ b/data/web/autodiscover.php
@@ -12,13 +12,14 @@ error_reporting(0);
$data = trim(file_get_contents("php://input"));
// Desktop client needs IMAP, unless it's Outlook 2013 or higher on Windows
-if (strpos($data, 'autodiscover/outlook/responseschema')) { // desktop client
+if (strpos($data, 'autodiscover/outlook/responseschema') !== false) { // desktop client
$configuration['autodiscoverType'] = 'imap';
if ($configuration['useEASforOutlook'] == 'yes' &&
- // Office for macOS does not support EAS
- strpos($_SERVER['HTTP_USER_AGENT'], 'Mac') === false &&
- // Outlook 2013 (version 15) or higher
- preg_match('/(Outlook|Office).+1[5-9]\./', $_SERVER['HTTP_USER_AGENT'])) {
+ // Office for macOS does not support EAS
+ strpos($_SERVER['HTTP_USER_AGENT'], 'Mac') === false &&
+ // Outlook 2013 (version 15) or higher
+ preg_match('/(Outlook|Office).+1[5-9]\./', $_SERVER['HTTP_USER_AGENT'])
+ ) {
$configuration['autodiscoverType'] = 'activesync';
}
}
@@ -60,8 +61,28 @@ else {
Request->EMailAddress;
+ try {
+ $discover = new SimpleXMLElement($data);
+ $email = $discover->Request->EMailAddress;
+ } catch (Exception $e) {
+ $email = $_SERVER['PHP_AUTH_USER'];
+ }
+
+ $username = trim($email);
+ try {
+ $stmt = $pdo->prepare("SELECT `name` FROM `mailbox` WHERE `username`= :username");
+ $stmt->execute(array(':username' => $username));
+ $MailboxData = $stmt->fetch(PDO::FETCH_ASSOC);
+ }
+ catch(PDOException $e) {
+ die("Failed to determine name from SQL");
+ }
+ if (!empty($MailboxData['name'])) {
+ $displayname = utf8_encode($MailboxData['name']);
+ }
+ else {
+ $displayname = $email;
+ }
if ($configuration['autodiscoverType'] == 'imap') {
?>
@@ -96,13 +117,13 @@ else {
CalDAV
- =$configuration['caldav']['server'];?>/SOGo/dav/=$email;?>/Calendar
+ https://=$configuration['caldav']['server'];?>/SOGo/dav/=$email;?>/Calendar
off
=$email;?>
CardDAV
- =$configuration['carddav']['server'];?>/SOGo/dav/=$email;?>/Contacts
+ https://=$configuration['carddav']['server'];?>/SOGo/dav/=$email;?>/Contacts
off
=$email;?>
@@ -111,21 +132,6 @@ else {
prepare("SELECT `name` FROM `mailbox` WHERE `username`= :username");
- $stmt->execute(array(':username' => $username));
- $MailboxData = $stmt->fetch(PDO::FETCH_ASSOC);
- }
- catch(PDOException $e) {
- die("Failed to determine name from SQL");
- }
- if (!empty($MailboxData['name'])) {
- $displayname = utf8_encode($MailboxData['name']);
- }
- else {
- $displayname = $email;
- }
?>
en:en
diff --git a/data/web/inc/functions.inc.php b/data/web/inc/functions.inc.php
index b3420530..af93794b 100644
--- a/data/web/inc/functions.inc.php
+++ b/data/web/inc/functions.inc.php
@@ -62,17 +62,17 @@ function hasMailboxObjectAccess($username, $role, $object) {
}
return false;
}
+function pem_to_der($pem_key) {
+ // Need to remove BEGIN/END PUBLIC KEY
+ $lines = explode("\n", trim($pem_key));
+ unset($lines[count($lines)-1]);
+ unset($lines[0]);
+ return base64_decode(implode('', $lines));
+}
function generate_tlsa_digest($hostname, $port, $starttls = null) {
if (!is_valid_domain_name($hostname)) {
return "Not a valid hostname";
}
- function pem_to_der($pem_key) {
- // Need to remove BEGIN/END PUBLIC KEY
- $lines = explode("\n", trim($pem_key));
- unset($lines[count($lines)-1]);
- unset($lines[0]);
- return base64_decode(implode('', $lines));
- }
if (empty($starttls)) {
$context = stream_context_create(array("ssl" => array("capture_peer_cert" => true, 'verify_peer' => false, 'allow_self_signed' => true)));
@@ -88,20 +88,24 @@ function generate_tlsa_digest($hostname, $port, $starttls = null) {
return $error_nr . ': ' . $error_msg;
}
$banner = fread($stream, 512 );
- if (preg_match("/^220/i", $banner)) {
+ if (preg_match("/^220/i", $banner)) { // SMTP
fwrite($stream,"HELO tlsa.generator.local\r\n");
fread($stream, 512);
fwrite($stream,"STARTTLS\r\n");
fread($stream, 512);
}
- elseif (preg_match("/imap.+starttls/i", $banner)) {
+ elseif (preg_match("/imap.+starttls/i", $banner)) { // IMAP
fwrite($stream,"A1 STARTTLS\r\n");
fread($stream, 512);
}
- elseif (preg_match("/^\+OK/", $banner)) {
+ elseif (preg_match("/^\+OK/", $banner)) { // POP3
fwrite($stream,"STLS\r\n");
fread($stream, 512);
}
+ elseif (preg_match("/^OK/m", $banner)) { // Sieve
+ fwrite($stream,"STARTTLS\r\n");
+ fread($stream, 512);
+ }
else {
return 'Unknown banner: "' . htmlspecialchars(trim($banner)) . '"';
}
diff --git a/data/web/inc/vars.inc.php b/data/web/inc/vars.inc.php
index a52442db..775af1e1 100644
--- a/data/web/inc/vars.inc.php
+++ b/data/web/inc/vars.inc.php
@@ -18,31 +18,48 @@ $database_name = getenv('DBNAME');
$mailcow_hostname = getenv('MAILCOW_HOSTNAME');
// Autodiscover settings
+$https_port = strpos($_SERVER['HTTP_HOST'], ':');
+if ($https_port === FALSE) {
+ $https_port = 443;
+} else {
+ $https_port = substr($_SERVER['HTTP_HOST'], $https_port+1);
+}
$autodiscover_config = array(
// Enable the autodiscover service for Outlook desktop clients
'useEASforOutlook' => 'yes',
// General autodiscover service type: "activesync" or "imap"
'autodiscoverType' => 'activesync',
- // Please don't use STARTTLS-enabled service ports here.
+ // Please don't use STARTTLS-enabled service ports in the "port" variable.
// The autodiscover service will always point to SMTPS and IMAPS (TLS-wrapped services).
+ // The autoconfig service will additionally announce the STARTTLS-enabled ports, specified in the "tlsport" variable.
'imap' => array(
'server' => $mailcow_hostname,
- 'port' => getenv('IMAPS_PORT'),
+ 'port' => array_pop(explode(':', getenv('IMAPS_PORT'))),
+ 'tlsport' => array_pop(explode(':', getenv('IMAP_PORT'))),
+ ),
+ 'pop3' => array(
+ 'server' => $mailcow_hostname,
+ 'port' => array_pop(explode(':', getenv('POPS_PORT'))),
+ 'tlsport' => array_pop(explode(':', getenv('POP_PORT'))),
),
'smtp' => array(
'server' => $mailcow_hostname,
- 'port' => getenv('SMTPS_PORT'),
+ 'port' => array_pop(explode(':', getenv('SMTPS_PORT'))),
+ 'tlsport' => array_pop(explode(':', getenv('SUBMISSION_PORT'))),
),
'activesync' => array(
- 'url' => 'https://'.$mailcow_hostname.'/Microsoft-Server-ActiveSync'
+ 'url' => 'https://'.$mailcow_hostname.($https_port == 443 ? '' : ':'.$https_port).'/Microsoft-Server-ActiveSync',
),
'caldav' => array(
- 'url' => 'https://'.$mailcow_hostname
+ 'server' => $mailcow_hostname,
+ 'port' => $https_port,
),
'carddav' => array(
- 'url' => 'https://'.$mailcow_hostname
- )
+ 'server' => $mailcow_hostname,
+ 'port' => $https_port,
+ ),
);
+unset($https_port);
// Where to go after adding and editing objects
// Can be "form" or "previous"
diff --git a/data/web/mobileconfig.php b/data/web/mobileconfig.php
new file mode 100644
index 00000000..198fa4d7
--- /dev/null
+++ b/data/web/mobileconfig.php
@@ -0,0 +1,167 @@
+prepare("SELECT `name` FROM `mailbox` WHERE `username`= :username");
+ $stmt->execute(array(':username' => $email));
+ $MailboxData = $stmt->fetch(PDO::FETCH_ASSOC);
+}
+catch(PDOException $e) {
+ die("Failed to determine name from SQL");
+}
+if (!empty($MailboxData['name'])) {
+ $displayname = utf8_encode($MailboxData['name']);
+}
+else {
+ $displayname = $email;
+}
+
+echo '' . "\n";
+?>
+
+
+
+ PayloadContent
+
+
+ CalDAVAccountDescription
+
+ CalDAVHostName
+
+ CalDAVPort
+
+ CalDAVPrincipalURL
+ /SOGo/dav/
+ CalDAVUseSSL
+
+ CalDAVUsername
+
+ PayloadDescription
+ Configures CalDAV account.
+ PayloadDisplayName
+ CalDAV ()
+ PayloadIdentifier
+ .CalDAV
+ PayloadOrganization
+
+ PayloadType
+ com.apple.caldav.account
+ PayloadUUID
+ FC898573-EBA8-48AF-93BD-BFA0C9778FA7
+ PayloadVersion
+ 1
+
+
+ EmailAccountDescription
+
+ EmailAccountType
+ EmailTypeIMAP
+ EmailAccountName
+
+ EmailAddress
+
+ IncomingMailServerAuthentication
+ EmailAuthPassword
+ IncomingMailServerHostName
+
+ IncomingMailServerPortNumber
+
+ IncomingMailServerUseSSL
+
+ IncomingMailServerUsername
+
+ OutgoingMailServerAuthentication
+ EmailAuthPassword
+ OutgoingMailServerHostName
+
+ OutgoingMailServerPortNumber
+
+ OutgoingMailServerUseSSL
+
+ OutgoingMailServerUsername
+
+ OutgoingPasswordSameAsIncomingPassword
+
+ PayloadDescription
+ Configures email account.
+ PayloadDisplayName
+ IMAP Account ()
+ PayloadIdentifier
+ .email
+ PayloadOrganization
+
+ PayloadType
+ com.apple.mail.managed
+ PayloadUUID
+ 00294FBB-1016-413E-87B9-652D856D6875
+ PayloadVersion
+ 1
+ PreventAppSheet
+
+ PreventMove
+
+ SMIMEEnabled
+
+
+
+ CardDAVAccountDescription
+
+ CardDAVHostName
+
+ CardDAVPort
+
+ CardDAVPrincipalURL
+ /SOGo/dav/
+ CardDAVUseSSL
+
+ CardDAVUsername
+
+ PayloadDescription
+ Configures CardDAV accounts
+ PayloadDisplayName
+ CardDAV ()
+ PayloadIdentifier
+ .carddav
+ PayloadOrganization
+
+ PayloadType
+ com.apple.carddav.account
+ PayloadUUID
+ 0797EF2B-B1F1-4BC7-ABCD-4580862252B4
+ PayloadVersion
+ 1
+
+
+ PayloadDescription
+ IMAP, CalDAV, CardDAV
+ PayloadDisplayName
+ Mailcow
+ PayloadIdentifier
+
+ PayloadOrganization
+
+ PayloadRemovalDisallowed
+
+ PayloadType
+ Configuration
+ PayloadUUID
+ 5EE248C5-ACCB-42D8-9199-8F8ED08D5624
+ PayloadVersion
+ 1
+
+