Hallo zusammen,
nun kommen wir mal wieder zu einem technischen Blog-Eintrag: Wie richte ich die Autokonfiguration von Thunderbird und Outlook ein, damit diese meinen Mailserver (hier: dovecot + postfix) nur durch Benutzernamen und E-Mail Adresse erreichen und das Konto automatisch einrichten.
Nun, dazu gibt es glücklicher Weise teilweise gut dokumentierte Lösungen. Ich präsentiere euch nun hier meine Lösung:
Automatische Konfiguration für Thunderbird
Wenn man im Thunderbird einen neuen E-Mail Account einrichtet, läuft folgendes ab (siehe dazu auch das Mozilla Wiki [1]):
- Thunderbird sucht erst mal lokal auf der Festplatte nach einer XML, die die Konfiguration enthält
- Findet Thunderbird dort nichts, versucht Thunderbird die Konfiguration über http://autoconfig.example.com/mail/config-v1.1.xml?emailaddress=user@example.com abzurufen, als Fallback http://example.com/.well-known/autoconfig/mail/config-v1.1.xml
- Findet Thunderbird unter den Adressen nichts, versucht Thunderbird die Konfiguration von https://live.mozillamessaging.com/autoconfig/example.com abzurufen
- Klappt das auch nicht, versucht Thunderbird die Konfiguration zu erraten
- Klappt das Erraten auch nicht, muss man die Daten selbst eingeben
Als Server Administrator können wir an der zweiten Stelle ansetzen: Wir geben Thunderbird die Konfiguration für unseren Mailserver als XML-Datei!
Dazu folgende Schritte:
- Einen neuen Webserver VHost anlegen, der autodiscover.example.com heißt
- (Optional) diesen mit Let’s Encrypt mit TLS sichern (kein SSL *sigh!*)
- Die mail/config-v1.1.xml im Document Root des neuen VHosts erstellen
- einen Symlink von .well-known/autoconfig/mail/config-v1.1.xml nach mail/config-v1.1.xml erstellen
Nun das ganze im Detail:
Neuen VHost anlegen
Da ich einen Debian 8 (Jessie) Server im Einsatz habe und dort Apache als Webserver installiert ist, habe ich unter /etc/apache2/sites-available/autodiscover.krinetzki.de.conf die Konfiguration für den neuen VHost abgelegt. Besonderheit: Ich habe mehrer Domains, habe die also alle in dieser Apache VHost Konfiguration abgelegt:
<VirtualHost *:80>
ServerAdmin stephan@krinetzki.de
ServerName autoconfig.krinetzki.de
ServerAlias autoconfig.twichteln.org
ServerAlias autoconfig.untotenarmee.de
ServerAlias autoconfig.alienstrawberry.de
ServerAlias autoconfig.sagt.xyz
ServerAlias autoconfig.therealkings.xyz
ServerAlias autoconfig.farinas-spirit-of-love.de
ServerAlias autoconfig.weltraummarmela.de
DirectoryIndex index.php index.htm index.html
DocumentRoot /var/www/html/autoconfig.krinetzki.de/
# RewriteEngine On
# RewriteCond %{HTTPS} !on
# RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
ServerSignature Off
</VirtualHost>
<VirtualHost *:443>
ServerAdmin stephan@krinetzki.de
ServerName autoconfig.krinetzki.de
ServerAlias autoconfig.twichteln.org
ServerAlias autoconfig.untotenarmee.de
ServerAlias autoconfig.alienstrawberry.de
ServerAlias autoconfig.sagt.xyz
ServerAlias autoconfig.therealkings.xyz
ServerAlias autoconfig.farinas-spirit-of-love.de
ServerAlias autoconfig.weltraummarmela.de
DirectoryIndex index.php index.htm index.html
DocumentRoot /var/www/html/autoconfig.krinetzki.de/
# <IfModule mod_ssl.c>
# SSLEngine on
# SSLCompression Off
# SSLCertificateKeyFile /etc/letsencrypt/live/autoconfig.krinetzki.de/privkey.pem
# SSLCertificateFile /etc/letsencrypt/live/autoconfig.krinetzki.de/fullchain.pem
# SSLVerifyDepth 2048
# SSLVerifyClient none
#
# </IfModule>
Header always set Strict-Transport-Security "max-age=63072000; preload"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
<Directory /var/www/html/autoconfig.krinetzki.de>
Options Indexes FollowSymLinks
AllowOverride All
Order Allow,Deny
Allow from All
</Directory>
# Logfiles
CustomLog /var/log/apache2/autoconfig.krinetzki.de_access_log combined
ErrorLog /var/log/apache2/autoconfig.krinetzki.de_error_log
ServerSignature Off
</VirtualHost>
Erklärung:
- Zeile 3: Der Name des VHosts
- Zeilen 5-11: Alias Namen für mehrere Domains
- Zeilen 15-17: Für die erstmalige Erstellung des Zertifikates auskommentiert. Sobald das Zertifikat da ist, wird alles nach https umgeleitet
- Zeilen 36-44: TLS Einstellungen
Mit einem a2ensite autoconfig.krinetzki.de.conf wird ein Symlink für die Seite unter /etc/apache2/sites-enabled erstellt. Mit einem apachectl configtest kann die Konfiguration überprüft werden und mit einem systemctl reload apache2 wird die Konfiguration des Apache neu eingelesen.
(Optional) VHost mit TLS absichern
Um den VHost nun mit TLS abzusichern, brauchen wir ja noch ein gültiges Zertifikat. Dieses können wir bei Let’s Encrypt holen und anschließend die Konfiguration des VHosts auf TLS only umstellen.
Dazu nutze ich den certbot der EFF:
certbot certonly --webroot -w /var/www/html/autodiscover.krinetzki.de/ -d autodiscover.krinetzki.de [-d autodiscover.neuedomain.de....]
Damit wird nun ein Zertifikat mit den Aliasen aus der VHost Konfiguration erstellt. Jeder Alias wird mit -d angehängt. Wenn alles geklappt hat, liegen das nun erstellte Zertifikat unter /etc/letsencrypt/live/autodiscover.krinetzki.de/.
Nun wie oben bereits erwähnt die Konfiguration anpassen (Kommentare entfernen) und die Apache Konfiguration neu laden. Danach ist der VHost mit TLS abgesichert.
config-v1.1.xml erstellen
Die Datei wird unter /var/www/html/autodiscover.krinetzki.de/mail/config-v1.1.xml erstellt und hat den Folgenden Inhalt:
<clientConfig version="1.1">
<emailProvider id="krinetzki.de">
<domain>krinetzki.de</domain>
<displayName>krinetzki.de Mailserver</displayName>
<displayShortName>mail.krinetzki.de</displayShortName>
<incomingServer type="imap">
<hostname>mail.krinetzki.de</hostname>
<port>143</port>
<socketType>STARTTLS</socketType>
<authentication>password-cleartext</authentication>
<username>%EMAILADDRESS%</username>
</incomingServer>
<outgoingServer type="smtp">
<hostname>mail.krinetzki.de</hostname>
<port>25</port>
<socketType>STARTTLS</socketType>
<authentication>password-cleartext</authentication>
<username>%EMAILADDRESS%</username>
</outgoingServer>
<webMail>
<loginPage url="https://webmail.krinetzki.de" />
<loginPageInfo url="https://webmail.krinetzki.de">
<username>%EMAILADDRESS%</username>
<usernameField id="RainLoopEmail" name="email" />
<passwordField id="RainLoopPassword" />
</loginPageInfo>
</webMail>
</emailProvider>
<emailProvider id="alienstrawberry.de">
<domain>alienstrawberry.de</domain>
<displayName>krinetzki.de Mailserver (alienstrawberry.de)</displayName>
<displayShortName>mail.krinetzki.de</displayShortName>
<incomingServer type="imap">
<hostname>mail.krinetzki.de</hostname>
<port>143</port>
<socketType>STARTTLS</socketType>
<authentication>password-cleartext</authentication>
<username>%EMAILADDRESS%</username>
</incomingServer>
<outgoingServer type="smtp">
<hostname>mail.krinetzki.de</hostname>
<port>25</port>
<socketType>STARTTLS</socketType>
<authentication>password-cleartext</authentication>
<username>%EMAILADDRESS%</username>
</outgoingServer>
<webMail>
<loginPage url="https://webmail.krinetzki.de" />
<loginPageInfo url="https://webmail.krinetzki.de">
<username>%EMAILADDRESS%</username>
<usernameField id="RainLoopEmail" name="email" />
<passwordField id="RainLoopPassword" />
</loginPageInfo>
</webMail>
</emailProvider>
<emailProvider id="twichteln.org">
<domain>twichteln.org</domain>
<displayName>krinetzki.de Mailserver (twichteln.org)</displayName>
<displayShortName>mail.krinetzki.de</displayShortName>
<incomingServer type="imap">
<hostname>mail.krinetzki.de</hostname>
<port>143</port>
<socketType>STARTTLS</socketType>
<authentication>password-cleartext</authentication>
<username>%EMAILADDRESS%</username>
</incomingServer>
<outgoingServer type="smtp">
<hostname>mail.krinetzki.de</hostname>
<port>25</port>
<socketType>STARTTLS</socketType>
<authentication>password-cleartext</authentication>
<username>%EMAILADDRESS%</username>
</outgoingServer>
<webMail>
<loginPage url="https://webmail.krinetzki.de" />
<loginPageInfo url="https://webmail.krinetzki.de">
<username>%EMAILADDRESS%</username>
<usernameField id="RainLoopEmail" name="email" />
<passwordField id="RainLoopPassword" />
</loginPageInfo>
</webMail>
</emailProvider>
<emailProvider id="untotenarmee.de">
<domain>untotenarmee.de</domain>
<displayName>krinetzki.de Mailserver (untotenarmee.de)</displayName>
<displayShortName>mail.krinetzki.de</displayShortName>
<incomingServer type="imap">
<hostname>mail.krinetzki.de</hostname>
<port>143</port>
<socketType>STARTTLS</socketType>
<authentication>password-cleartext</authentication>
<username>%EMAILADDRESS%</username>
</incomingServer>
<outgoingServer type="smtp">
<hostname>mail.krinetzki.de</hostname>
<port>25</port>
<socketType>STARTTLS</socketType>
<authentication>password-cleartext</authentication>
<username>%EMAILADDRESS%</username>
</outgoingServer>
<webMail>
<loginPage url="https://webmail.krinetzki.de" />
<loginPageInfo url="https://webmail.krinetzki.de">
<username>%EMAILADDRESS%</username>
<usernameField id="RainLoopEmail" name="email" />
<passwordField id="RainLoopPassword" />
</loginPageInfo>
</webMail>
</emailProvider>
<emailProvider id="sagt.xyz">
<domain>sagt.xyz</domain>
<displayName>krinetzki.de Mailserver (sagt.xyz)</displayName>
<displayShortName>mail.krinetzki.de</displayShortName>
<incomingServer type="imap">
<hostname>mail.krinetzki.de</hostname>
<port>143</port>
<socketType>STARTTLS</socketType>
<authentication>password-cleartext</authentication>
<username>%EMAILADDRESS%</username>
</incomingServer>
<outgoingServer type="smtp">
<hostname>mail.krinetzki.de</hostname>
<port>25</port>
<socketType>STARTTLS</socketType>
<authentication>password-cleartext</authentication>
<username>%EMAILADDRESS%</username>
</outgoingServer>
<webMail>
<loginPage url="https://webmail.krinetzki.de" />
<loginPageInfo url="https://webmail.krinetzki.de">
<username>%EMAILADDRESS%</username>
<usernameField id="RainLoopEmail" name="email" />
<passwordField id="RainLoopPassword" />
</loginPageInfo>
</webMail>
</emailProvider>
<emailProvider id="therealkings.xyz">
<domain>therealkings.xyz</domain>
<displayName>krinetzki.de Mailserver (therealings.xyz)</displayName>
<displayShortName>mail.krinetzki.de</displayShortName>
<incomingServer type="imap">
<hostname>mail.krinetzki.de</hostname>
<port>143</port>
<socketType>STARTTLS</socketType>
<authentication>password-cleartext</authentication>
<username>%EMAILADDRESS%</username>
</incomingServer>
<outgoingServer type="smtp">
<hostname>mail.krinetzki.de</hostname>
<port>25</port>
<socketType>STARTTLS</socketType>
<authentication>password-cleartext</authentication>
<username>%EMAILADDRESS%</username>
</outgoingServer>
<webMail>
<loginPage url="https://webmail.krinetzki.de" />
<loginPageInfo url="https://webmail.krinetzki.de">
<username>%EMAILADDRESS%</username>
<usernameField id="RainLoopEmail" name="email" />
<passwordField id="RainLoopPassword" />
</loginPageInfo>
</webMail>
</emailProvider>
<emailProvider id="farinas-spirit-of-love.de">
<domain>farinas-spirit-of-love.de</domain>
<displayName>krinetzki.de Mailserver (farinas-spirit-of-love.de)</displayName>
<displayShortName>mail.krinetzki.de</displayShortName>
<incomingServer type="imap">
<hostname>mail.krinetzki.de</hostname>
<port>143</port>
<socketType>STARTTLS</socketType>
<authentication>password-cleartext</authentication>
<username>%EMAILADDRESS%</username>
</incomingServer>
<outgoingServer type="smtp">
<hostname>mail.krinetzki.de</hostname>
<port>25</port>
<socketType>STARTTLS</socketType>
<authentication>password-cleartext</authentication>
<username>%EMAILADDRESS%</username>
</outgoingServer>
<webMail>
<loginPage url="https://webmail.krinetzki.de" />
<loginPageInfo url="https://webmail.krinetzki.de">
<username>%EMAILADDRESS%</username>
<usernameField id="RainLoopEmail" name="email" />
<passwordField id="RainLoopPassword" />
</loginPageInfo>
</webMail>
</emailProvider>
<emailProvider id="weltraummarmela.de">
<domain>weltraummarmela.de</domain>
<displayName>krinetzki.de Mailserver (weltraummarmela.de)</displayName>
<displayShortName>mail.krinetzki.de</displayShortName>
<incomingServer type="imap">
<hostname>mail.krinetzki.de</hostname>
<port>143</port>
<socketType>STARTTLS</socketType>
<authentication>password-cleartext</authentication>
<username>%EMAILADDRESS%</username>
</incomingServer>
<outgoingServer type="smtp">
<hostname>mail.krinetzki.de</hostname>
<port>25</port>
<socketType>STARTTLS</socketType>
<authentication>password-cleartext</authentication>
<username>%EMAILADDRESS%</username>
</outgoingServer>
<webMail>
<loginPage url="https://webmail.krinetzki.de" />
<loginPageInfo url="https://webmail.krinetzki.de">
<username>%EMAILADDRESS%</username>
<usernameField id="RainLoopEmail" name="email" />
<passwordField id="RainLoopPassword" />
</loginPageInfo>
</webMail>
</emailProvider>
</clientConfig>
Diese Datei wirkt erschlagend, allerdings sind nur die Zeilen 2-28 relevant. Diese wiederholen sich für jede Domain, die man bereitstellt
- Zeile 2: id des E-Mail Providers. Muss eindeutig für die gesamte XML Datei sein. Empfehlung: das Domain-Name
- Zeile 3: Domain des E-Mail Accounts
- Zeile 4 und 5: Beschreibung des E-Mail Accounts (Wird im Thunderbird in den Einstellungen angezeigt)
- Zeile 6-12: IMAP-Einstellungen
- Zeile 7: Hostname vom dovecot
- Zeile 8: Port (SSL: 993, STARTTLS: 143)
- Zeile 9: STARTTLS oder SSL
- Zeile 10: Passwort Verschlüsselung auf Server Seite
- Zeile 11: Benutzername = Vollständige E-Mail Adresse
- Zeilen 13-19: SMTP Einstellungen
- Zeile 14: Hostname vom Postfix
- Zeile 15: Port (SSL: 465, STARTTLS: 25)
- Zeile 16: STARTTLS oder SSL
- Zeile 17: Passwort Verschlüsselung auf Server Seite
- Zeile 18: Benutzername = Vollständige E-Mail Adresse
- Zeile 20-27: Web Mailer Einstellungen:
- Zeile 21: URL zur Login Seite (SSL only!)
- Zeile 22-26: Information zum automatischen ausfüllen der Informationen im Webmailer
Weitere Information zu den Einstellungen und Optionen der Datei findet ihr unter [2].
Nach dem diese Datei erstellt wurde, fehlt noch der Symlink für den Fallback:
# mkdir -p
# ln -s /var/www/html/autoconfig.krinetzki.de/mail/config-v1.1.xml /var/www/html/autoconfig.krinetzki.de/.well-known/autoconfig/mail/config-v1.1.xml
Und fertig. Nun kann Thunderbird sich die Konfiguration abholen und richtet sich wie von Geisterhand selbst ein.
Automatische Konfiguration für Outlook
Microsoft und OpenSource – das geht meistens schief. Allerdings gibt es recht gut dokumentiert eine Möglichkeit, wie man es schafft, dass sich Outlook auch automatisch einrichtet. Dazu habe ich mich der Dokumentation unter [3] bedient, allerdings natürlich meinen Gegebenheiten angepasst. Also hier nun das HowTo:
- VHost autodiscover.example.com einrichten und mit TLS absichern (hier ist es ein MUSS)
- DNS Einträge anlegen
- XML-Datei für Outlook anlegen
- Konfiguration testen
VHost anlegen
Hier ist es ähnlich wie mit dem VHost für autoconfig.krinetzki.de, es gibt aber eine Besonderheit:
<VirtualHost *:80>
ServerAdmin stephan@krinetzki.de
ServerName autodiscover.krinetzki.de
ServerAlias autodiscover.twichteln.org
ServerAlias autodiscover.untotenarmee.de
ServerAlias autodiscover.alienstrawberry.de
ServerAlias autodiscover.sagt.xyz
ServerAlias autodiscover.therealkings.xyz
ServerAlias autodiscover.farinas-spirit-of-love.de
ServerAlias autodiscover.weltraummarmela.de
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
ServerSignature Off
</VirtualHost>
<VirtualHost *:443>
ServerAdmin stephan@krinetzki.de
ServerName autodiscover.krinetzki.de
ServerAlias autodiscover.twichteln.org
ServerAlias autodiscover.untotenarmee.de
ServerAlias autodiscover.alienstrawberry.de
ServerAlias autodiscover.sagt.xyz
ServerAlias autodiscover.therealkings.xyz
ServerAlias autodiscover.farinas-spirit-of-love.de
ServerAlias autodiscover.weltraummarmela.de
DirectoryIndex index.php index.htm index.html
DocumentRoot /var/www/autodiscover.krinetzki.de/httpdocs
<IfModule mod_ssl.c>
SSLEngine on
SSLCompression Off
SSLCertificateKeyFile /etc/letsencrypt/live/autodiscover.krinetzki.de/privkey.pem
SSLCertificateFile /etc/letsencrypt/live/autodiscover.krinetzki.de/fullchain.pem
SSLVerifyDepth 2048
SSLVerifyClient none
</IfModule>
Header always set Strict-Transport-Security "max-age=63072000; preload"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
<Directory /var/www/autodiscover.krinetzki.de/httpdocs>
Options Indexes FollowSymLinks
AllowOverride All
Order Allow,Deny
Allow from All
</Directory>
AddType application/x-httpd-php .php .php3 .php4 .php5 .xml
# Logfiles
CustomLog /var/log/apache2/autodiscover.krinetzki.de_access_log combined
ErrorLog /var/log/apache2/autodiscover.krinetzki.de_error_log
ServerSignature Off
</VirtualHost>
Zeile 55 ist hier das interessante: Ich lasse die XML Datei für Outlook durch PHP parsen. Warum, steht weiter unten.
Neben der Zeile von oben ist es ganz wichtig und unabdingbar, dass der Host per https erreichbar ist. Outlook verlangt das so. Das Vorgehen ist wie oben beschrieben, nur mit den neuen Hosts.
DNS Einträge
Microsoft erwartet ja bei Outlook, dass man irgendwo einen Exchange Server am laufen hat oder halt nen IIS. Oder irgendwas anderes, Microsoft spezifisches. Da wir das aber nicht haben und auch nicht wollen, allerdings den Outlook/Outlook Express/Windows Mail Usern den Luxus der automatischen Konfiguration bieten wollen, müssen wir ein paar DNS Einträge ändern.
In den SRV Einträgen muss folgendes stehen:
_autodiscover._tcp.example.com. 2635 IN SRV 10 0 443 autodiscover.example.com.
Zur Erklärung:
- _autodiscover – weist Outlook an, den Eintrag zu nutzen
- _tcp – das Protokoll
- example.com – Domain
- 10 0 443 autodiscover.example.com – 10 ist die Priorität des Dienstes, 0 für ein Loadbalancing bei mehreren gleichen Prioritäten, 443 der Zielport, autodiscover.example.com ist die Zieladresse
So sieht es bei mir aus:
# dig -t SRV _autodiscover._tcp.krinetzki.de
; <<>> DiG 9.9.5-3ubuntu0.8-Ubuntu <<>> -t SRV _autodiscover._tcp.krinetzki.de
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36701
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;_autodiscover._tcp.krinetzki.de. IN SRV
;; ANSWER SECTION:
_autodiscover._tcp.krinetzki.de. 86400 IN SRV 10 0 443 autodiscover.krinetzki.de.
;; Query time: 36 msec
;; SERVER: 192.168.178.1#53(192.168.178.1)
;; WHEN: Sat Jul 30 21:51:33 DST 2016
;; MSG SIZE rcvd: 94
Damit sind die DNS Einträge fertig.
XML Datei für Outlook
nun weiß Outlook, dass es die Konfiguration für krinetzki.de bei autodiscover.krinetzki.de über Port 443 abgeholt werden kann. Mit dem folgenden HTTP POST Request erfolgt nun die eigentliche Abfrage der Konfigurationsdaten:
<?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>info@krinetzki.de</EMailAddress>
</Request>
</Autodiscover>
Die folgende Antwort bekommt dann Outlook:
<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/responseschema/2006">
<Response xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a">
<User>
<DisplayName>nausch.org</DisplayName>
</User>
<Account>
<AccountType>email</AccountType>
<Action>settings</Action>
<Protocol>
<Type>IMAP</Type>
<Server>mail.krinetzki.de</Server>
<Port>143</Port>
<DomainRequired>off</DomainRequired>
<SPA>off</SPA>
<Encryption>TLS</Encryption>
<AuthRequired>on</AuthRequired>
<LoginName>info@krinetzki.de</LoginName>
</Protocol>
<Protocol>
<Type>SMTP</Type>
<Server>mail.krinetzki.de</Server>
<Port>25</Port>
<DomainRequired>off</DomainRequired>
<SPA>off</SPA>
<Encryption>TLS</Encryption>
<AuthRequired>on</AuthRequired>
<LoginName>info@krinetzki.de</LoginName>
</Protocol>
</Account>
</Response>
</Autodiscover>
So weit so gut. Problem wäre ja nun, dass diese XML-Datei statisch wäre und das wäre in meinem Fall mehr als suboptimal. Ich will ja diese Info für jede E-Mail Adresse haben, also verwenden wir PHP:
<?php
$score = array();
$rawdata = file_get_contents('php://input');
preg_match('/<EMailAddress>(.*)<\/EMailAddress>/', $rawdata, $score);
header('Content-Type: application/xml');
?>
<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/responseschema/2006">
<Response xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a">
<User>
<DisplayName>mail.krinetzki.de</DisplayName>
</User>
<Account>
<AccountType>email</AccountType>
<Action>settings</Action>
<Protocol>
<Type>IMAP</Type>
<Server>mail.krinetzki.de</Server>
<Port>143</Port>
<DomainRequired>off</DomainRequired>
<SPA>off</SPA>
<Encryption>TLS</Encryption>
<AuthRequired>on</AuthRequired>
<LoginName><?php echo $score[1]; ?></LoginName>
</Protocol>
<Protocol>
<Type>SMTP</Type>
<Server>mail.krinetzki.de</Server>
<Port>25</Port>
<DomainRequired>off</DomainRequired>
<SPA>off</SPA>
<Encryption>TLS</Encryption>
<AuthRequired>on</AuthRequired>
<LoginName><?php echo $score[1]; ?></LoginName>
</Protocol>
</Account>
</Response>
</Autodiscover>
Und tada – Wir bekommen pro User nun die richtige Konfiguration. Ihr wollt Beweise? Damit könnt ihr testen:
Konfiguration testen
Um das ganze zu testen, folgen nun folgende Schritte:
- Verbindung zum Server aufbauen
- HTTP POST Request absetzen
- XML erhalten
Hier das mal für meinen Server:
$ openssl s_client -connect autodiscover.krinetzki.de:443
CONNECTED(00000003)
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
0 s:/CN=krinetzki.de
i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
i:/O=Digital Signature Trust Co./CN=DST Root CA X3
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIFNDCCBBygAwIBAgISA5RV9eT5q/kLPqW+iATkHUPPMA0GCSqGSIb3DQEBCwUA
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xNjA3MjUxODM4MDBaFw0x
NjEwMjMxODM4MDBaMBcxFTATBgNVBAMTDGtyaW5ldHpraS5kZTCCASIwDQYJKoZI
hvcNAQEBBQADggEPADCCAQoCggEBAMcXw9WWsGLeGs8W6eBulwNKAxTeJknZhaDc
n+TCJNauzMoDgnsYRrtIOY7kVUhmycgDBcy0aSvV1UCWlMxgvT3HiUUPP28rqHsm
miX1eBVGmL0qzV7ngMuelsLydU/k2gEd6SjdcsD5KOnFRtx3oPJVb8EefbANHVtH
6G6AkGWb6s3BnAv+xusXJWLrGX5bxM1I4Os7rR7yLqhS8yLeDBP3eRuTcO2zqQbT
S52p3Br68VvTQjEkSqTE2UdLlcQAaQyzxhcKgacxhXAyBYAYAOsQ6hJCOv5q7Po/
NzhkIg+3Pfn32HjtVm9mYw08AM65j2Ni0rtyAt0YOd+n3Ba6j+8CAwEAAaOCAkUw
ggJBMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUH
AwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUt1ZCZqaHbMe08uQsIK0YEbSELfsw
HwYDVR0jBBgwFoAUqEpqYwR93brm0Tm3pkVl7/Oo7KEwcAYIKwYBBQUHAQEEZDBi
MC8GCCsGAQUFBzABhiNodHRwOi8vb2NzcC5pbnQteDMubGV0c2VuY3J5cHQub3Jn
LzAvBggrBgEFBQcwAoYjaHR0cDovL2NlcnQuaW50LXgzLmxldHNlbmNyeXB0Lm9y
Zy8wTwYDVR0RBEgwRoIRaXB2NC5rcmluZXR6a2kuZGWCDGtyaW5ldHpraS5kZYIR
bWFpbC5rcmluZXR6a2kuZGWCEHd3dy5rcmluZXR6a2kuZGUwgf4GA1UdIASB9jCB
8zAIBgZngQwBAgEwgeYGCysGAQQBgt8TAQEBMIHWMCYGCCsGAQUFBwIBFhpodHRw
Oi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCBqwYIKwYBBQUHAgIwgZ4MgZtUaGlzIENl
cnRpZmljYXRlIG1heSBvbmx5IGJlIHJlbGllZCB1cG9uIGJ5IFJlbHlpbmcgUGFy
dGllcyBhbmQgb25seSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIENlcnRpZmljYXRl
IFBvbGljeSBmb3VuZCBhdCBodHRwczovL2xldHNlbmNyeXB0Lm9yZy9yZXBvc2l0
b3J5LzANBgkqhkiG9w0BAQsFAAOCAQEAQjRl7yDcagfHV6O7SH68aerEHUYfHEmu
vRNhLAbtlVkVY7D3zQsy0+90Ivoe3NJlEPfsvQpnJhS0n/plzmTBZqhPbkEk6rGc
l+tSCiEohX4L7rq3KejUimqyN/LP7Rxfq1IL6CfGZy+hlKHjfZZBXK0m53NS9FmM
WJpi8AaJFgPq4AjXQhKIz3fIP/HetPLS1pd0REBAGCcWCKec39PTo3ewuZY6EG0p
m7Q3JCANHXLtwFuto33VzjSpSjfPwMGoUqzjIhQxJAgQSqkkQ1jlHMPF4WUdchm5
wc4gMFihfwHyHuqBLlht9Meho54zhHrEzRfM69lrNK6oQr+e80oanQ==
-----END CERTIFICATE-----
subject=/CN=krinetzki.de
issuer=/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
---
No client certificate CA names sent
---
SSL handshake has read 3204 bytes and written 421 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES256-GCM-SHA384
Session-ID: F9E839A79F24F8C6D3AE0610522E13A577C20FFB3CABC30297E3C9DF29BE36F5
Session-ID-ctx:
Master-Key: C3B014374FA609E2F350905D9A79885237715EC5E546CAC8B5D176B1CE73001D285496C0D5E28DB3D904230F39D3FC3F
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
TLS session ticket lifetime hint: 300 (seconds)
TLS session ticket:
0000 - e7 63 47 eb cd ce 57 38-b6 b0 0b b4 ce fc 45 0a .cG...W8......E.
0010 - 42 16 14 7f 6e f2 29 78-d9 5c 7d 65 48 09 48 70 B...n.)x.\}eH.Hp
0020 - e8 5a 96 01 15 28 22 d0-b3 7d 41 bc 0e bd 1b ea .Z...("..}A.....
0030 - 92 10 78 41 67 6e 6e c2-14 36 7d a3 3c 1f 2e ac ..xAgnn..6}.<...
0040 - bc b6 40 5d c4 59 8e d0-33 64 bd b9 42 9d 0f 1a ..@].Y..3d..B...
0050 - d1 38 43 77 a9 c3 51 70-91 d0 4d 99 cf 04 a5 a5 .8Cw..Qp..M.....
0060 - a7 d0 18 b4 52 77 e3 87-e5 ce 01 04 b5 c5 72 79 ....Rw........ry
0070 - 49 9b df 33 b7 49 30 a5-e7 23 54 f8 02 b5 62 42 I..3.I0..#T...bB
0080 - b3 f5 41 b6 d8 52 33 14-cd 9a c8 be d6 ac c6 e5 ..A..R3.........
0090 - 0d 3a 27 59 42 e7 40 1c-cd 93 db 51 0e 79 99 87 .:'YB.@....Q.y..
00a0 - 6b 8a f4 15 73 78 71 e8-7d 53 53 24 13 d4 af 26 k...sxq.}SS$...&
00b0 - 59 60 e5 0e 72 77 50 e8-e1 16 7c f4 f7 47 2b 63 Y`..rwP...|..G+c
Start Time: 1469909296
Timeout : 300 (sec)
Verify return code: 20 (unable to get local issuer certificate)
---
POST /autodiscover/autodiscover.xml HTTP/1.1
Host: autodiscover.krinetzki.de
Content-Length: 351
Content-Type: application/x-www-form-urlencoded
<?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>info@krinetzki.de</EMailAddress></Request></Autodiscover>
HTTP/1.1 200 OK
Date: Sat, 30 Jul 2016 20:08:34 GMT
Server: Apache
Strict-Transport-Security: max-age=63072000; preload
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Vary: Accept-Encoding
X-Content-Type-Options: nosniff
Content-Length: 1030
Content-Type: application/xml
<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/responseschema/2006">
<Response xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a">
<User>
<DisplayName>mail.krinetzki.de</DisplayName>
</User>
<Account>
<AccountType>email</AccountType>
<Action>settings</Action>
<Protocol>
<Type>IMAP</Type>
<Server>mail.krinetzki.de</Server>
<Port>143</Port>
<DomainRequired>off</DomainRequired>
<SPA>off</SPA>
<Encryption>TLS</Encryption>
<AuthRequired>on</AuthRequired>
<LoginName>info@krinetzki.de</LoginName>
</Protocol>
<Protocol>
<Type>SMTP</Type>
<Server>mail.krinetzki.de</Server>
<Port>25</Port>
<DomainRequired>off</DomainRequired>
<SPA>off</SPA>
<Encryption>TLS</Encryption>
<AuthRequired>on</AuthRequired>
<LoginName>info@krinetzki.de</LoginName>
</Protocol>
</Account>
</Response>
</Autodiscover>
Diese XML-Datei erhält nun Outlook und richtet euch den Account ein. Toll, oder?
TL;DR
Mit ein wenig Aufwand lässt es sich recht schnell erreichen, dass sich die Mail Clients automatisch einrichten, sobald sie mit dem eigenen Server kommunizieren wollen. Dabei finde ich, dass Thunderbird deutlich einfacher ist, als Outlook.
[1] https://wiki.mozilla.org/Thunderbird:Autoconfiguration
[2] https://wiki.mozilla.org/Thunderbird:Autoconfiguration:ConfigFileFormat
[3] http://dokuwiki.nausch.org/doku.php/centos:mail_c6:autoconfig_2
Kommentar verfassen