MailMig Teil 6: Hokus Pokus Fidibus – Thunderbird Konfiguration wie von Zauberhand

Wie im letzten Artikel angekündigt hier nun ein paar Tipps, wie man Thunderbird in größeren Umgebungen automatisch konfigurieren kann. In unserem Beispiel im Zusammenspiel mit Group-Office, allerdings ist das recht flexibel.

Die Lösung für ISPs

Was schon recht bekannt ist, ist die automatische Konfiguration der Server für ein Konto entsprechend der Domain. Das ganze ist beschrieben im MDC. Das ist jedoch nur eine Unterstützung, da dieses Verfahren lediglich – anhand der Domain aus der Email Adresse – die Server (Name, Ports, SSL…) für den Email Empfang bzw. Versandt bestimmt.

Die Lösung für den Mittelstand

Weniger bekannt ist die Möglichkeit, die komplette Konfiguration beim Start, beispielsweise per http, zur Verfügung zu stellen. Wir haben damit bisher folgendes realisiert:

  • Mailkonto komplett konfiguriert, inkl. einheitlicher Signatur, speziellen Ordnern (…)
  • LDAP Addressbuch fertig konfiguriert
  • vorgegebene Startseite
  • vorgegebene Schriftarten
  • Proxy Konfiguration
  • automatische Updates disabled

Man bedenke, dass all diese Einstellungen komplett automatisch geschehen ohne zutun des Anwenders oder Admins.

Aha. Und wie?

Im groben sind dazu 3 Dinge nötig.

  1. Kleine Anpassungen von Thunderbird
  2. Ein Webserver mit CGI / Perl / PHP
  3. Ein Backend mit den erforderlichen Daten

Anpassungen von Thunderbird

In die Datei greprefs/all.js muss folgendes hinzugefügt werden:

// AutoConfig
pref('general.config.obscure_value', 0);
pref('general.config.filename','thunderbird.cfg');

Diese Zeilen “sagen” Thunderbird, dass er ein externes Konfigurationsfile (thunderbird.cfg) einlesen soll.

Nun wird die oben genannte Datei “thunderbird.cfg” direkt im Programmverzeichnis von Thunderbird angelegt:

//
// auto config
try {

if(getenv("USER") != "") {
  // *NIX settings
  var env_user = getenv("USER");
} else {
  // Windows settings
  var env_user = getenv("USERNAME");
}

lockPref("autoadmin.append_emailaddr", true);
lockPref("mail.identity.useremail", env_user);
lockPref("autoadmin.global_config_url","http://<URL TO AUTOCONFIG>");

} catch(e) {
  displayError("ARGL \:-P", e);
}

In dieser Datei (javascript) wird zuerst der Benutzername bestimmt. Dies geschieht über die Umgebungsvariablen und ist zwischen Linux und Windows verschieden. Die Variable “env_user” wird dann an die weiter unten definierte URL beim Aufruf angehangen. Wir bekommen also ein “http://<URL TO AUTOCONFIG>?env_user” als Aufruf an den Webserver. Die Variante mit env_user wird allerdings nur so lange gezogen, wie noch keine Email Addresse vorhanden ist. Sobald die Email Addresse konfiguriert ist, wird diese an die URL angehangen (s. autoadmin.append_emailaddr).

Damit sind die Anpassungen an Thunderbird schon fertig.

CGI / Backend

Die URL sollte auf ein dynamisches Script zeigen. Dieses Script muss mit dem Benutzernamen oder der Email Addresse als Parameter umgehen können und dem entsprechend den passenden Output liefern. Ich habe das ganze so realisiert, dass ein Perl Script die erforderlichen Daten aus der Group-Office Datenbank ausliest und diese dann im richtigen Format Thunderbird präsentiert.

Wichtig dabei ist, dass der Benutzername für den Arbeitsplatz gleich dem ist, der auch in der Datenbank zu finden ist. Man benötigt eine eindeutige ID – im ersten Step wird die UserID und im zweiten Step (ab dann, wenn das Konto angelegt ist) wird die Email Addresse genommen.

Mein Script: Thunderbird Autoconfig Perl Backend

Interessantes zum Script
UTF8

Die Datei und der Output müssen komplett in UTF8 sein. Anonsten kommt es zu Darstellungsfehlern, bzw. wird je nach dem der Inhalt erst gar nicht von Thunderbird angenommen

Signatur

Teile der Daten für die Signatur werden in HTML Code umgewandelt. Da wir als Standard das HTML Format in Mails nutzen, muss auch die Signatur in HTML sein. Dem entsprechend müssen auch Sonderzeichen oder Umlaute in HTML umgewandelt werden. In Perl habe ich das mit dem Modul HTML::Entitites realisiert.

Signatur II

Ab dem Punkt “# get logo by location” findet sich eine Funktion, die anhand des Standortes ein passendes Logo auswählt. Wir haben verschiedene Logos für die verschiedenen Standorte – mit dieser Funktion ist die Signatur “Corporate Design” kompatibel.

LDAP Verzeichnis

lockPref(“ldap_2.servers.LDAPINT.position”, 1);

setzt das Globale Addressbuch auf die Position 1 (also Default).

lockPref(“ldap_2.autoComplete.directoryServer”, “ldap_2.servers.LDAPINT”);
lockPref(“ldap_2.autoComplete.useDirectory”, true);

sind dafür zuständig, dass dieses LDAP Verzeichnis für die autoComplete Funktion genutzt wird.

defaultPref(“ldap_2.servers.LDAPINT.maxHits”, 100);

ist dafür zuständig, dass maximal 100 LDAP Treffer angezeigt werden.

lockPref(“ldap_2.servers.LDAPINT.autoComplete.filterTemplate”, “(|(displayName=*\%v*)(mail=*\%v*)(mozillaNickname=*\%v*))”);

damit kann man anpassen, in welchen LDAP Attributen für autoComplete gesucht wird und wie (bspw. c=contains). Achtung! Das % ist hier escaped, so muss es im Perl Script stehen!

lockPref(“mail.addr_book.quicksearchquery.format”, “?(or(PrimaryEmail,c,\@V)(DisplayName,c,\@V)(FirstName,c,\@V)(LastName,c,\@V)(NickName,c,\@V))”);
das ist equivalent zum …autoComplete.filterTemplate, allerdings für die Suche im Addressfeld (Email schreiben).

Mail

defaultPref(“mail.identity.id1.fullName”, “\\\”$db_last_name, $db_first_name\\\””);

setzt den “Full Name” für den Account. Der String ist mit einem Komma getrennt und das gibt Probleme im Zusammenspiel mit Lightning. Daher haben wir den String für Thunderbird zusätzlich in Anführungszeichen gesetzt. Das taucht im Mailverkehr nirgendwo auf, behebt jedoch das Problem mit Lightning.

pref(“mail.imap.expunge_after_delete”, true);
pref(“mail.imap.expunge_option”, 1);

diese Parameter bringen Thunderbird dazu IMAP Aktionen sofort durchzuführen. Das ist interessant, wenn mehrere Clients auf eine Email Konto arbeiten (bspw. Support). Normalerweise würde Thunderbird einige Aktionen erst beim Beenden durchführen.

lockPref(“app.update.enabled”, false);
pref(“extensions.update.enabled”, false);
lockPref(“browser.search.update”, false);

damit werden die automatischen Updates für Thunderbird, bzw. die Erweiterungen deaktiviert.

Werte wie setzen?

Vor den Werten in meinen Beispielen als auch im Script findet Ihr

  • pref
  • lockPref
  • defaultPref

Mit “pref” wird ein Wert so gesetzt, das er zur Laufzeit “änderbar” ist – wird TB neu gestartet, so wird der Wert wieder auf den Autoconfig Wert gesetzt. “defaultPref” setzt einen Wert so, dass er geändert werden kann und diese Änderung auch nach einem Neustart bestehen bleibt. “lockPref” ist quasi endgültig – der Wert kann vom Benutzer nicht geändert werden.

Stolperfallen

Es gibt einige Stolperfallen in der Konfiguration. So muss man immer auf den Zeichensatz achten, Zeichen wie %, @ oder ” escapen (teilweise sogar mehrfach, je nach Programmiersprache). Des Weiteren ist debuggen recht schwierig. Meistens ignoriert TB die Konfiguration einfach – ohne Fehlermeldung.

Geht noch mehr?

Also erweitern kann man das ganze noch. Ich habe mir die meisten der Einstellungen selbst besorgt. Und zwar aus der Datei prefs.js im Home Verzeichnis von Thunderbird. Das ist quasi das Gegenstück zur Online Konfiguration. Parameter kann man dort entnehmen und sie in das Perl Script einbauen. Auch für Erweiterungen funktioniert das, sofern sie die zentrale Konfigurationsdatei nutzen.

Schwierig

Das ganze ist ein wenig schwierig zu beschreiben. Sollte jemand Fragen / Kritik dazu haben – her damit (je nach dem was, bitte nicht als Kommentar)!

11 Responses to MailMig Teil 6: Hokus Pokus Fidibus – Thunderbird Konfiguration wie von Zauberhand

  1. Hallo Danke für die aufschlussreiche Serie! Wie ich sehe, hast du im Teil 2 Lightning konfiguriert. Dazu muss Lightning vorher im Thunderbird als Plugin installiert sein und an den Plugins scheitere ich gerade.
    Ich habe zentral Thunderbird verteilt und einige Plugins in das Unterverzeichnis extensions.
    Beim ersten Start wird das Plugin nun angezeigt, aber es ist nicht aktiviert.
    Also habe ich das Autoconfig Script um die Zeile
    lockPref(“extensions.enabledAddons”, “{972ce4c6-7e08-4474-a285-3208198ce6fd}:9.0.1,{697f78f3-e156-403a-a585-0b1ab05d4ec4}:0.2.5.1″);
    ergänzt. Leider sind die extensions trotzdem nicht aktiviert. Wo muss man noch schrauben)

    • Ronny

      Hallo,
      das Passwort muss der User eingeben. Single-Sign-On hab ich Leider nicht hinbekommen. Für Tipps wäre ich aber dankbar.

      Ronny

  2. Interessant!

    Hast Du eine Lösung für das Problem gefunden, dass Du beim Autocomplete des Empfängers im Verfassen-Fenster nur Zugriff auf die erste Emailadresse hast?

  3. Tolle Reihe. Wusste nicht, das der Vogel dazu in der Lage ist…nur die Verwendung von Perl behagt mir nicht so sehr…aber das lässt sich ja austauschen.
    Bin gespannt wie es weiter geht.

    • Ronny

      Das ist nach Gusto. Der Code mag auch nicht wahnsinnig gut sein – ist eben gewachsen.

      Mir geht es darum zu zeigen was geht. Ob man das dann mit Perl, PHP oder mit einem Shell Script als CGI macht – jeder so wie er mag. Die Backends unterscheiden sich ja auch. Ich denke nicht dass jeder Group-Office nehmen wird ;-)

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>