diff --git a/docs/client-android.md b/docs/client-android.md
new file mode 100644
index 000000000..f4d471f33
--- /dev/null
+++ b/docs/client-android.md
@@ -0,0 +1,5 @@
+1. Open the *Email* app.
+2. If this is your first email account, tap *Add Account*; if not, tap *More* and *Settings* and then *Add account*.
+3. Select *Microsoft Exchange ActiveSync*.
+4. Enter your email address () and password.
+5. Tap *Sign in*.
diff --git a/docs/client-apple.md b/docs/client-apple.md
new file mode 100644
index 000000000..cd2b7c2a9
--- /dev/null
+++ b/docs/client-apple.md
@@ -0,0 +1,10 @@
+1. Download and open Mailcow.mobileconfig.
+2. Enter the unlock code (iPhone) or computer password (Mac).
+3. Enter your email password three times when prompted.
+
+On iOS, Exchange is also supported as an alternative to the procedure above. It has the advantage of supporting push email (i.e. you are immediately notified of incoming messages), but has some limitations, e.g. it does not support more than three email addresses per contact in your address book. Follow the steps below if you decide to use Exchange instead.
+
+1. Open the *Settings* app, tap *Mail*, tap *Accounts*, tap *Add Acccount*, select *Exchange*.
+2. Enter your email address (
) and tap *Next*.
+3. Enter your password, tap *Next* again.
+4. Finally, tap *Save*.
diff --git a/docs/client-emclient.md b/docs/client-emclient.md
new file mode 100644
index 000000000..6186647e3
--- /dev/null
+++ b/docs/client-emclient.md
@@ -0,0 +1,7 @@
+1. Launch eM Client.
+2. If this is the first time you launched eM Client, it asks you to set up your account. Proceed to step 4.
+3. Go to *Menu* at the top, select *Tools* and *Accounts*.
+4. Enter your email address (
) and click *Start Now*.
+5. Enter your password and click *Continue*.
+6. Enter your name (
) and click *Next*.
+7. Click *Finish*.
diff --git a/docs/client-kontact.md b/docs/client-kontact.md
new file mode 100644
index 000000000..b4b6a2728
--- /dev/null
+++ b/docs/client-kontact.md
@@ -0,0 +1,16 @@
+1. Launch Kontact.
+2. If this is the first time you launched Kontact or KMail, it asks you to set up your account. Proceed to step 4.
+3. Go to *Mail* in the sidebar. Go to the *Tools* menu and select *Account Wizard*.
+4. Enter your name (
), email address (
) and your password. Click *Next*.
+5. Click *Create Account*. If prompted, re-enter your password and click *OK*.
+6. Close the window by clicking *Finish*.
+7. Go to *Calendar* in the sidebar.
+8. Go to the *Settings* menu and select *Configure KOrganizer*.
+9. Go to the *Calendars* tab and click the *Add* button.
+10. Choose *DAV groupware resource* and click *OK*.
+11. Enter your email address (
) and your password. Click *Next*.
+12. Select *ScalableOGo* from the dropdown menu and click *Next*.
+13. Enter
your Mailcow hostname into the *Host* field and click *Next*.
+14. Click *Test Connection* and then *Finish*. Finally, click *OK* twice.
+
+Once you have set up Kontact, you can also use KMail, KOrganizer and KAddressBook individually.
diff --git a/docs/client-outlook.md b/docs/client-outlook.md
new file mode 100644
index 000000000..8ec22a0d1
--- /dev/null
+++ b/docs/client-outlook.md
@@ -0,0 +1,42 @@
+
), email address (
) and your password. Click *Next*.
+5. When prompted, enter your password again, check *Remember my credentials* and click *OK*.
+6. Click the *Allow* button.
+7. Click *Finish*.
+
+## Outlook 2007 or 2010 on Windows
+
+
), email address (
) and your password. Click *Next*.
+6. Click *Finish*.
+7. Go to the *CalDav Synchronizer* ribbon and click *Synchronization Profiles*.
+8. Click the second button at top (*Add multiple profiles*), select *Sogo*, click *Ok*.
+9. Click the *Get IMAP/POP3 account settings* button.
+10. Click *Discover resources and assign to Outlook folders*.
+11. In the *Select Resource* window that pops up, select your main calendar (usually *Personal Calendar*), click the *...* button, assign it to *Calendar*, and click *OK*. Go to the *Address Books* and *Tasks* tabs and repeat repeat the process accordingly. Do not assign multiple calendars, address books or task lists!
+12. Close all windows with the *OK* buttons.
+
+## Outlook 2011 or higher on macOS
+
+The Mac version of Outlook does not synchronize calendars and contacts and therefore is not supported.
diff --git a/docs/client-thunderbird.md b/docs/client-thunderbird.md
new file mode 100644
index 000000000..819f3b46d
--- /dev/null
+++ b/docs/client-thunderbird.md
@@ -0,0 +1,53 @@
+
), email address (
) and your password. Make sure the Remember password checkbox is selected and click Continue.
+
) on the left, click the Account Actions dropdown and select Set as Default.
+
, enter your email address and password, check Use Password Manager and click OK.
+
) and click *Next*.
+6. Enter your password and click *Log in*.
+
+Once you have set up the Mail app, you can also use the People and Calendar apps.
diff --git a/docs/client-windowsphone.md b/docs/client-windowsphone.md
new file mode 100644
index 000000000..d675bf71c
--- /dev/null
+++ b/docs/client-windowsphone.md
@@ -0,0 +1,4 @@
+1. Open the *Settings* app. Select *email + accounts* and tap *add an account*.
+2. Tap *Exchange*.
+3. Enter your email address (
) and your password. Tap *Sign in*.
+4. Tap *done*.
diff --git a/docs/client.md b/docs/client.md
new file mode 100644
index 000000000..448232dd8
--- /dev/null
+++ b/docs/client.md
@@ -0,0 +1,11 @@
+Mailcow supports a variety of email clients, both on desktop computers and on smartphones.
+Below, you can find a number of configuration guides that explain how to configure your Mailcow account.
+
+- [Android](client-android)
+- [Apple iOS / macOS](client-apple)
+- [eM Client](client-emclient)
+- [KDE Kontact / KMail](client-kontact)
+- [Microsoft Outlook](client-outlook)
+- [Mozilla Thunderbird](client-thunderbird)
+- [Windows](client-windows)
+- [Windows Phone](client-windowsphone)
diff --git a/docs/clients.js b/docs/clients.js
new file mode 100644
index 000000000..97db86e50
--- /dev/null
+++ b/docs/clients.js
@@ -0,0 +1,112 @@
+if (window.location.href.indexOf('/client/') >= 0) {
+ window.onload = function () {
+ function getParameterByName(name) {
+ var match = RegExp('[?#&]' + name + '=([^&]*)').exec(window.location.hash);
+ return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
+ }
+
+ /* Store URL variables in cookies */
+ if (getParameterByName('host')) {
+ document.cookie = "host=" + getParameterByName('host') + "; path=/";
+ }
+ if (getParameterByName('email')) {
+ var email = getParameterByName('email');
+ document.cookie = "email=" + email + "; path=/";
+ document.cookie = "domain=" + email.substring(email.indexOf('@') + 1) + "; path=/";
+ }
+ if (getParameterByName('name')) {
+ document.cookie = "name=" + getParameterByName('name') + "; path=/";
+ }
+ if (getParameterByName('port')) {
+ document.cookie = "port=" + getParameterByName('port') + "; path=/";
+ }
+ if (getParameterByName('integrator')) {
+ document.cookie = "integrator=" + getParameterByName('integrator') + "; path=/";
+ }
+ if (getParameterByName('outlookEAS')) {
+ document.cookie = "outlookEAS=" + getParameterByName('outlookEAS') + "; path=/";
+ }
+ }
+}
+
+if (window.location.href.indexOf('/client-') >= 0) {
+ window.onload = function () {
+ function getCookie(cn) {
+ var cs = document.cookie.split(';');
+ for (var i = 0; i < cs.length; i++) {
+ var c = cs[i];
+ while (c.charAt(0) == ' ') {
+ c = c.substring(1);
+ }
+ if (c.indexOf(cn + "=") == 0) {
+ return c.substring(cn.length + 1, c.length);
+ }
+ }
+ return "";
+ }
+
+ /* Hide variable fields if no values are available */
+ if (!getCookie('host')) {
+ Array.prototype.forEach.call(document.getElementsByClassName('client_variables_available'), function(el) {
+ el.style.display = 'none';
+ });
+ } else {
+ Array.prototype.forEach.call(document.getElementsByClassName('client_variables_unavailable'), function(el) {
+ el.style.display = 'none';
+ });
+ }
+
+ /* Hide the TOC, which might contain hidden content */
+ Array.prototype.forEach.call(document.getElementsByClassName('md-sidebar--secondary'), function(el) {
+ el.style.display = 'none';
+ });
+
+ /* Substitute variables */
+ Array.prototype.forEach.call(document.getElementsByClassName('client_var_host'), function(el) {
+ el.innerText = getCookie('host');
+ });
+ Array.prototype.forEach.call(document.getElementsByClassName('client_var_link'), function(el) {
+ if (!getCookie('host')) {
+ el.href = '#';
+ } else if (getCookie('port') != '443') {
+ el.href = 'https://' + getCookie('host') + ':' + getCookie('port') + '/' + el.getAttribute("href");
+ } else {
+ el.href = 'https://' + getCookie('host') + '/' + el.getAttribute("href");
+ }
+ });
+ Array.prototype.forEach.call(document.getElementsByClassName('client_var_email'), function(el) {
+ el.innerText = getCookie('email');
+ });
+ Array.prototype.forEach.call(document.getElementsByClassName('client_var_name'), function(el) {
+ el.innerText = getCookie('name');
+ });
+ if (getCookie('port') != '443') {
+ Array.prototype.forEach.call(document.getElementsByClassName('client_var_port'), function(el) {
+ el.innerText = ':' + getCookie('port');
+ });
+ }
+
+ /* Hide those sections that are not applicable because useOutlookForEAS is disabled or SOGo integrator is not available */
+ if (getCookie('integrator')) {
+ Array.prototype.forEach.call(document.getElementsByClassName('client_var_integrator_link'), function(el) {
+ el.href = el.href.replace('__DOMAIN__', getCookie('domain')).replace('__VERSION__', getCookie('integrator'));
+ });
+ Array.prototype.forEach.call(document.getElementsByClassName('client_integrator_disabled'), function(el) {
+ el.style.display = 'none';
+ });
+ } else if (getCookie('host')) {
+ Array.prototype.forEach.call(document.getElementsByClassName('client_integrator_enabled'), function(el) {
+ el.style.display = 'none';
+ });
+ }
+ if (getCookie('outlookEAS') || !getCookie('host')) {
+ Array.prototype.forEach.call(document.getElementsByClassName('client_outlookEAS_disabled'), function(el) {
+ el.style.display = 'none';
+ });
+ } else {
+ Array.prototype.forEach.call(document.getElementsByClassName('client_outlookEAS_enabled'), function(el) {
+ el.style.display = 'none';
+ });
+ }
+ }
+}
diff --git a/mkdocs.yml b/mkdocs.yml
index 1abdfd54a..980828c49 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -15,6 +15,7 @@ markdown_extensions:
- pymdownx.tasklist(custom_checkbox=true)
- pymdownx.mark
- pymdownx.tilde
+ - pymdownx.extra
- footnotes
pages:
- 'Information & Support': 'index.md'
@@ -68,6 +69,16 @@ pages:
- 'Redirect HTTP to HTTPS': 'u_e-80_to_443.md'
- 'Adjust Service Configurations': 'u_e-change_config.md'
- 'Deinstall': 'u_e-deinstall.md'
+- 'Client Configuration':
+ - 'Overview': 'client.md'
+ - 'Android': 'client-android.md'
+ - 'Apple macOS / iOS': 'client-apple.md'
+ - 'eM Client': 'client-emclient.md'
+ - 'KDE Kontact': 'client-kontact.md'
+ - 'Microsoft Outlook': 'client-outlook.md'
+ - 'Mozilla Thunderbird': 'client-thunderbird.md'
+ - 'Windows': 'client-windows.md'
+ - 'Windows Phone': 'client-windowsphone.md'
- 'Third party apps':
- 'Roundcube': 'third_party-roundcube.md'
- 'Portainer': 'third_party-portainer.md'
@@ -83,4 +94,5 @@ extra:
- type: github-alt
link: https://github.com/mailcow
extra_css: [extra.css]
+extra_javascript: [clients.js]
google_analytics: ['UA-92608422-4', 'mailcow.github.io']