1. Home
  2. News
  3. Download
    1. Thunderbird Release Version
    2. Thunderbird 153 ESR (2026)
    3. Thunderbird 140 ESR (2025)
    4. Thunderbird Beta Version
    5. Language Pack (User Interface)
    6. Dictionaries (Spell Check)
  4. Help & Lexicon
    1. Instructions for Thunderbird
    2. Questions & Answers (FAQ) about Thunderbird
    3. Help for this Website
    4. Last Changes
  5. Forums
    1. Unresolved Threads
    2. Latest Posts
    3. Threads of the last 24 hours
  • Login
  • Register
  • 
  • Search
This Thread
  • Everywhere
  • This Thread
  • This Forum
  • Forum
  • Lexicon
  • Articles
  • Pages
  • More Options
  1. Thunderbird Mail DE
  2. Forum
  3. Help and issue reports for "Thunders" add-ons
  4. Quote Colors & Collapse

QuoteColors Updates für 68 und 78

  • Thunder
  • August 26, 2020 at 10:36 PM
  • Closed
  • Thread is Unresolved
  • Thunder
    Administrator
    Reactions Received
    783
    Posts
    7,319
    entries
    169
    Member since
    8. Jul. 2003
    Helpful answers
    58
    • August 26, 2020 at 10:36 PM
    • #1

    jobisoft

    Ich habe QuoteColors für Thunderbird 68 komplett korrekt zum Laufen gebracht - jedenfalls fallen mir erstmal keine Fehler mehr auf. Im Gegensatz zu "meinem Vorgänger" auf ATN funktionieren jetzt auch die Optionen wieder korrekt. Ich werde mich bei beiden Autoren (altes "QuoteColor" und "New QuoteColor" melden, um das wieder unter einen Hut zu bekommen.

    Für Thunderbird 78 habe ich mir nun ein Herz gefasst und habe Deine Wrapper API eingebaut. Die Optionen funktionieren schon komplett. Ich scheitere aber noch am JS Injection, um die alten Overlays nun zum Laufen zu bekommen. Die drei alten Overlays enthalten quasi Keinen XUL-Code, sondern jeweils nur eingebundene weitere JS Dateien und jeweils einen CDATA-Block mit in bisschen Iinline JavaScript.

    Hier ein Beispiel eines alten Overlays:

    XML
    <?xml version="1.0"?>
    
    <!--
    // Quote Colors extension, overlay for messenger.xul
    -->
    
    <!DOCTYPE overlay SYSTEM "chrome://quotecolors/locale/qc_options.dtd">
    <overlay id="quotecolors" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
    
      <script type="application/x-javascript" src="chrome://quotecolors/content/qc_globals.js"/>
      <script type="application/x-javascript" src="chrome://quotecolors/content/qc_overlay.js"/>
      <script type="application/x-javascript" src="chrome://quotecolors/content/quotecolors.js"/>
      <script type="application/x-javascript">
    <![CDATA[
        // observe mail pane config changes
        QCMailPaneConfigObserver.register();
        // observe QC pref changes to reload message
        QCPrefUpdateObserver.register();
        
        window.addEventListener("load", QCObj.initMain, false);
        window.addEventListener("unload", QCunloadMessenger, false);
    ]]>
      </script>
    
    </overlay>
    Display More

    Daraus habe ich folgende neue JS-Datei gemacht:

    JavaScript: qc_messengeroverlay.js
    // Import any needed modules.
    var { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
    
    // Load an additional JavaScript file.
    Services.scriptloader.loadSubScript("chrome://quotecolors/content/qc_globals.js", window, "UTF-8");
    Services.scriptloader.loadSubScript("chrome://quotecolors/content/qc_overlay.js", window, "UTF-8");
    Services.scriptloader.loadSubScript("chrome://quotecolors/content/quotecolors.js", window, "UTF-8");
    
    function onLoad(activatedWhileWindowOpen) {
    
      // observe mail pane config changes
      QCMailPaneConfigObserver.register();
      // observe QC pref changes to reload message
      QCPrefUpdateObserver.register();
      
      window.addEventListener("load", QCObj.initMain, false);
      window.addEventListener("unload", QCunloadMessenger, false);
    
    }
    
    function onUnload(deactivatedWhileWindowOpen) {
    }
    Display More

    Meine background.js sieht so aus:

    JavaScript: background.js
    messenger.WindowListener.registerDefaultPrefs("defaults/preferences/quotecolors.js");
    
    messenger.WindowListener.registerChromeUrl([ 
      ["content", "quotecolors",           "chrome/content/"],
      ["locale",  "quotecolors", "en-US",  "chrome/locale/en-US/"],
      ["locale",  "quotecolors", "de-DE",  "chrome/locale/de-DE/"],
      ["locale",  "quotecolors", "es-ES",  "chrome/locale/es-ES/"],
      ["locale",  "quotecolors", "fr-FR",  "chrome/locale/fr-FR/"],
      ["locale",  "quotecolors", "it-IT",  "chrome/locale/it-IT/"],
      ["locale",  "quotecolors", "ja-JP",  "chrome/locale/ja-JP/"],
      ["locale",  "quotecolors", "pl-PL",  "chrome/locale/pl-PL/"],
      ["locale",  "quotecolors", "cs-CZ",  "chrome/locale/cs-CZ/"],
      ["locale",  "quotecolors", "hu-HU",  "chrome/locale/hu-HU/"],
      ["locale",  "quotecolors", "ru-RU",  "chrome/locale/ru-RU/"],
      ["locale",  "quotecolors", "da-DK",  "chrome/locale/da-DK/"]
    ]);
    
    messenger.WindowListener.registerOptionsPage("chrome://quotecolors/content/options/qc_options.xhtml");
    
    messenger.WindowListener.registerWindow(
      "chrome://messenger/content/messenger.xul", 
      "chrome://quotecolors/content/qc_messengeroverlay.js");
    
    messenger.WindowListener.registerWindow(
      "chrome://messenger/content/messageWindow.xul", 
      "chrome://quotecolors/content/qc_msgwindowoverlay.js");
    
    messenger.WindowListener.registerWindow(
      "chrome://messenger/content/msgPrintEngine.xul", 
      "chrome://quotecolors/content/qc_printpreviewoverlay.js");
    
    // messenger.WindowListener.registerShutdownScript("chrome://quotecolors/content/shutdown.js")
    
    messenger.WindowListener.startListening();
    Display More

    Das erneuerte Overlay (wie auch immer ich das jetzt bezeichnen soll, wenn es jetzt diese neue JS-Datei ist) bleibt letztlich wirkungslos. Fehlermeldungen in der Konsole gibt es keine.

    Gruß
    Thunder ( Mein persönlicher Wunschzettel )

    Keine Hilfe per Konversation! - Danke für Euer Engagement und Eure Geduld!

  • jobisoft
    Senior Member
    Reactions Received
    239
    Posts
    905
    Member since
    18. Aug. 2016
    Helpful answers
    9
    • August 26, 2020 at 10:51 PM
    • #2
    JavaScript
    // Import any needed modules.
    var { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
    
    
    // Load an additional JavaScript file.
    Services.scriptloader.loadSubScript("chrome://quotecolors/content/qc_globals.js", window, "UTF-8");
    Services.scriptloader.loadSubScript("chrome://quotecolors/content/qc_overlay.js", window, "UTF-8");
    Services.scriptloader.loadSubScript("chrome://quotecolors/content/quotecolors.js", window, "UTF-8");
    
    
    function onLoad(activatedWhileWindowOpen) {
     // observe mail pane config changes
     window.QCMailPaneConfigObserver.register();
     // observe QC pref changes to reload message
     window.QCPrefUpdateObserver.register();
     window.QCObj.initMain();
    }
    
    
    function onUnload(deactivatedWhileWindowOpen) {
     window.QCunloadMessenger()
    }
    Display More

    Also onload und onunload event funktionieren nicht, sondern dumusst das jeweils in onLoad() und onUnload() packen. Nicht vergessen window. vor deine Funktionsaufrufe dranzuhängen, weil deine JS files ja in window geladen wurden.

    ich denke so müsste das funktionieren. Geht das?

    Geht das?

    John Bieling / Matrix: TbSync / GitHub: jobisoft
    Thunderbird Add-on Support Engineer / Add-on Coordinator (MZLA)

    https://developer.thunderbird.net/add-ons/community

  • Thunder
    Administrator
    Reactions Received
    783
    Posts
    7,319
    entries
    169
    Member since
    8. Jul. 2003
    Helpful answers
    58
    • August 26, 2020 at 11:18 PM
    • #3

    Ich schaue es mir gleich mal an.

    Blöd gefragt: muss ich window. dann quer durch die 3 JS Dateien hinzufügen, in denen diese Variablen / Objekte drin sind?

    Gruß
    Thunder ( Mein persönlicher Wunschzettel )

    Keine Hilfe per Konversation! - Danke für Euer Engagement und Eure Geduld!

  • jobisoft
    Senior Member
    Reactions Received
    239
    Posts
    905
    Member since
    18. Aug. 2016
    Helpful answers
    9
    • August 26, 2020 at 11:52 PM
    • #4
    Quote from Thunder

    Blöd gefragt: muss ich window. dann quer durch die 3 JS Dateien hinzufügen, in denen diese Variablen / Objekte drin sind?

    Ne, dein code läuft im window scope ganz normal wie früher. Der Injector aber nicht (die onLoad und onUnload Funktionen). Der hat also keinen direkten Zugriff auf Objekte in window, daher musst du in den beiden Funktionen window. mit angeben.

    John Bieling / Matrix: TbSync / GitHub: jobisoft
    Thunderbird Add-on Support Engineer / Add-on Coordinator (MZLA)

    https://developer.thunderbird.net/add-ons/community

  • Thunder
    Administrator
    Reactions Received
    783
    Posts
    7,319
    entries
    169
    Member since
    8. Jul. 2003
    Helpful answers
    58
    • August 27, 2020 at 1:22 AM
    • #5

    Mhhh, dat will noch nicht.

    Ich habe daraus jetzt mal ein GitLab-Projekt gemacht:

    master-Branch ist für den 78er:

    https://gitlab.com/ThunderbirdMailDE/quote-colors

    Im Branch Thunderbird_68 kann man die alten Overlays noch sehen, die so im 68er auch korrekt funktionieren.

    Gruß
    Thunder ( Mein persönlicher Wunschzettel )

    Keine Hilfe per Konversation! - Danke für Euer Engagement und Eure Geduld!

  • Thunder
    Administrator
    Reactions Received
    783
    Posts
    7,319
    entries
    169
    Member since
    8. Jul. 2003
    Helpful answers
    58
    • August 27, 2020 at 1:30 AM
    • #6

    Der lädt den Kram nicht. Wenn ich in Deine onLoad function ein console.log("xyz"); einfüge, dann kann ich davon in der Fehlerkonsole nichts sehen.

    Gruß
    Thunder ( Mein persönlicher Wunschzettel )

    Keine Hilfe per Konversation! - Danke für Euer Engagement und Eure Geduld!

  • jobisoft
    Senior Member
    Reactions Received
    239
    Posts
    905
    Member since
    18. Aug. 2016
    Helpful answers
    9
    • August 27, 2020 at 8:09 AM
    • #7

    Du hast da einen MixMax gemacht. Dein manifest sagt ab 78, deine background.js registriert aber deine JS files für 68er XUL files.

    Phase 1 und Phase 2 des updates (Wechsel auf WindowListener) werden in 68 gemacht. Erst wenn in 68 alles klappt, dann kommt der Wechsel auf 78 und da musst du alle xul files in xhtml files umbenennen (auch die core files, auf die der WL reagieren soll).

    In Phase 3 musst du dann deinen eigentlichen code evtl noch an Änderungen von 68->78 anpassen. Ich wollte aber nicht das du beide Baustellen gleichzeitig hast (WL setup UND 68->78 changes). Deswegen sagt der guide gaz klar: Erst im letzten Schritt wechseln wir auf 78.

    Wenn ich dein add-on anpasse und in 68 lade, kann ich console.log() Einträge im onload sehen. Ich weiß aber nicht wie das add-on sonst funktioniert und konnte es nicht weiter testen

    in qc_globals.js musst du die top level const los werden, weil die beim neu laden (z.B. Updates, oder remove und neu installieren ohne TB neu zu starten) nicht überschrieben werden können und Fehler werfen und weil du kein try catch um den entsprechenden scriptload hast dein ganzen load script stirbt. Ich würde da ein var QCGlobals = {} empfehlen und die dinger da drin definieren.

    John Bieling / Matrix: TbSync / GitHub: jobisoft
    Thunderbird Add-on Support Engineer / Add-on Coordinator (MZLA)

    https://developer.thunderbird.net/add-ons/community

  • jobisoft
    Senior Member
    Reactions Received
    239
    Posts
    905
    Member since
    18. Aug. 2016
    Helpful answers
    9
    • August 27, 2020 at 8:12 AM
    • #8

    Oder du lädst qc_globals.js nicht in window sondern in window.QCGlobals , welches du vor dem scriptload aufruf mit window.QCGlobals = {} platt machst.

    John Bieling / Matrix: TbSync / GitHub: jobisoft
    Thunderbird Add-on Support Engineer / Add-on Coordinator (MZLA)

    https://developer.thunderbird.net/add-ons/community

  • Thunder
    Administrator
    Reactions Received
    783
    Posts
    7,319
    entries
    169
    Member since
    8. Jul. 2003
    Helpful answers
    58
    • August 27, 2020 at 11:06 AM
    • #9
    Quote from jobisoft

    (auch die core files, auf die der WL reagieren soll).

    Autsch. Die hätte ich in der background.js natürlich umbenennen müssen. Ich bin tatsächlich daran gescheitert dies gestern zu verstehen und hatte mich gewundert wie bzw. "welche" core files ich umbenennen soll. Ich habe jetzt ein QCGlobals = {} draus gemacht.

    Das Add-on läuft jetzt zumindest bei der Anzeige der Mails korrekt. Es scheitert noch der PrintMode - da passiert noch nichts. Hier ist die Änderung mit den QCGlobals: https://gitlab.com/ThunderbirdMai…6e25a5b723f3406

    Danke Dir schonmal!

    Gruß
    Thunder ( Mein persönlicher Wunschzettel )

    Keine Hilfe per Konversation! - Danke für Euer Engagement und Eure Geduld!

  • jobisoft
    Senior Member
    Reactions Received
    239
    Posts
    905
    Member since
    18. Aug. 2016
    Helpful answers
    9
    • August 27, 2020 at 11:31 AM
    • #10

    Bei meinen Tests (jetzt in TB78) ging es hier nicht weiter

    https://gitlab.com/ThunderbirdMai…ors.js#L276-280

    D.h. es gibt keinen zweiten Call. gnPrintMsgCnt ist -1 und du macht einen early return. Dann ist Ende.

    Hat das denn in TB68 (mit dem WindowListener) funktioniert? Also ist das ein Problem bei der Umstellung auf den WindowListener oder ein Problem das durch TB78 verurscaht wird?

    John Bieling / Matrix: TbSync / GitHub: jobisoft
    Thunderbird Add-on Support Engineer / Add-on Coordinator (MZLA)

    https://developer.thunderbird.net/add-ons/community

  • Thunder
    Administrator
    Reactions Received
    783
    Posts
    7,319
    entries
    169
    Member since
    8. Jul. 2003
    Helpful answers
    58
    • August 27, 2020 at 2:41 PM
    • #11

    Mhh, vielleicht hatte ich mich eh geirrt und das Ganze beim Drucken hatte schon vorher (also komplett vor allen Migrations-Arbeiten) nicht funktioniert. Das stelle ich momentan mal hinten an.

    Eine andere Frage, an der ich schon ewig immer wieder scheitere:

    Ich muss einen prefsObserver im Code ändern, da er schlichtweg versagt. Ich bekomme den observer zum Laufen, möchte diesen aber auf den "quotecolors." Branch begrenzen. Daran scheitere ich.

    Gruß
    Thunder ( Mein persönlicher Wunschzettel )

    Keine Hilfe per Konversation! - Danke für Euer Engagement und Eure Geduld!

  • Thunder
    Administrator
    Reactions Received
    783
    Posts
    7,319
    entries
    169
    Member since
    8. Jul. 2003
    Helpful answers
    58
    • August 27, 2020 at 3:52 PM
    • #12
    Quote from jobisoft

    D.h. es gibt keinen zweiten Call. gnPrintMsgCnt ist -1 und du macht einen early return. Dann ist Ende.

    Das hatte so bis Tb 60 funktioniert - warum auch immer. Ab Tb 68 und jetz im Tb 78 musste ich einfach die return Zeile auskommentieren. Dann läuft es korrekt - auch wenn man mehrere Mails auf einmal druckt.

    Die prefsObserver könnte ich später noch optimieren. Und die optischen Gruppierungen der Optionen in Thunderbird 78 (weil die captions da ja anders umgesetzt wurden) kann ich später noch verbessern.

    Ansonsten habe ich jetzt fertige, wirklich funktionierende Versionen sowohl für Tb 68 als auch Tb 78.

    Ich hatte Malte Rücker per E-Mail versucht zu kontaktieren. Immerhin kam die Mail nicht zurück. Ich glaube aber, dass er nicht antworten wird, da er auf ATN seit vielen Jahren auch keine Antworten zu Bewertungen mehr abgegeben hatte. Vielleicht könnte man mich für dieses Add-on eintragen / freischalten:

    https://addons.thunderbird.net/de/thunderbird/addon/quote-colors/

    Dann kann ich dort die neuen Versionen hoch laden, deren ID ich momentan auch im manifest verwende.

    Gruß
    Thunder ( Mein persönlicher Wunschzettel )

    Keine Hilfe per Konversation! - Danke für Euer Engagement und Eure Geduld!

  • jobisoft
    Senior Member
    Reactions Received
    239
    Posts
    905
    Member since
    18. Aug. 2016
    Helpful answers
    9
    • August 27, 2020 at 4:24 PM
    • #13
    Quote from Thunder

    Vielleicht könnte man mich für dieses Add-on eintragen / freischalten:


    https://addons.thunderbird.net/de/thunderbird/addon/quote-colors/

    Das dürfen wir leider nicht. Es muss vom originalen Author eine Freigabe erfolgen. Im ATN backend kann er dich als Eigentümer oder als Entwickler hinzufügen. Anders geht es leider nicht. Bei den Add-Ons die ich übernommen habe musste ich auch diesen Weg gehen. :-(

    John Bieling / Matrix: TbSync / GitHub: jobisoft
    Thunderbird Add-on Support Engineer / Add-on Coordinator (MZLA)

    https://developer.thunderbird.net/add-ons/community

  • jobisoft
    Senior Member
    Reactions Received
    239
    Posts
    905
    Member since
    18. Aug. 2016
    Helpful answers
    9
    • August 27, 2020 at 4:41 PM
    • #14
    Quote from Thunder

    Ich muss einen prefsObserver im Code ändern, da er schlichtweg versagt. Ich bekomme den observer zum Laufen, möchte diesen aber auf den "quotecolors." Branch begrenzen. Daran scheitere ich.

    JavaScript
      var myObserver = {
       observe: function(aSubject, aTopic, aData) {
         console.log(aSubject);
         console.log(aTopic);
         console.log(aData);
       }
      } 
      Services.prefs.getBranch("").addObserver("extensions.sendtocategory.", myObserver);

    Das klappt bei mir wie in der Dokumentation beschrieben. Das Ding feuert nur bei Änderungen in meinem sendtocategory branch. Wie sieht denn dein Code aus? Es funktioniert wohl nur auf dem root branch.

    John Bieling / Matrix: TbSync / GitHub: jobisoft
    Thunderbird Add-on Support Engineer / Add-on Coordinator (MZLA)

    https://developer.thunderbird.net/add-ons/community

  • jobisoft
    Senior Member
    Reactions Received
    239
    Posts
    905
    Member since
    18. Aug. 2016
    Helpful answers
    9
    • August 27, 2020 at 4:43 PM
    • #15

    Evtl mit dem hier zusammentun?

    https://addons.thunderbird.net/en-us/thunderb…ew-quotecolors/

    John Bieling / Matrix: TbSync / GitHub: jobisoft
    Thunderbird Add-on Support Engineer / Add-on Coordinator (MZLA)

    https://developer.thunderbird.net/add-ons/community

  • jobisoft
    Senior Member
    Reactions Received
    239
    Posts
    905
    Member since
    18. Aug. 2016
    Helpful answers
    9
    • August 27, 2020 at 4:51 PM
    • #16

    Kannst du mir deine ATN email per PM zukommen lassen?

    John Bieling / Matrix: TbSync / GitHub: jobisoft
    Thunderbird Add-on Support Engineer / Add-on Coordinator (MZLA)

    https://developer.thunderbird.net/add-ons/community

  • Thunder
    Administrator
    Reactions Received
    783
    Posts
    7,319
    entries
    169
    Member since
    8. Jul. 2003
    Helpful answers
    58
    • August 27, 2020 at 8:37 PM
    • #17

    Ist es möglich ein Array von CSS-Dateien zu injecten?

    Beispiel:

    Code
      WL.injectCSS(["resource://allowhtmltemp/skin/aht_buttons.css","resource://allowhtmltemp/skin/aht_statusbar.css"]);
      WL.injectElements(`
        <keyset>

    Und gleiche Frage auch für die DTD-Dateien am Ende des ganze XUL-Injects:

    Code
            </hbox>
          </hbox>
    
        </hbox>`,
      [["chrome://allowhtmltemp/locale/allowhtmltemp.dtd"],["chrome://messenger/locale/messenger.dtd"]]);

    Gruß
    Thunder ( Mein persönlicher Wunschzettel )

    Keine Hilfe per Konversation! - Danke für Euer Engagement und Eure Geduld!

  • Thunder
    Administrator
    Reactions Received
    783
    Posts
    7,319
    entries
    169
    Member since
    8. Jul. 2003
    Helpful answers
    58
    • August 27, 2020 at 8:40 PM
    • #18

    Und noch eine Frage:

    Code
    var {
      Services
    } = ChromeUtils.import("resource://gre/modules/Services.jsm");
    ChromeUtils.import("resource:///modules/gloda/mimemsg.js");

    Geht der Import der ChromeUtils so nicht mehr? Ich bekomme da eine Fehlermeldung. Liegt dies schlichtweg daran, dass ich alles in ein Object packen muss?

    Gruß
    Thunder ( Mein persönlicher Wunschzettel )

    Keine Hilfe per Konversation! - Danke für Euer Engagement und Eure Geduld!

  • jobisoft
    Senior Member
    Reactions Received
    239
    Posts
    905
    Member since
    18. Aug. 2016
    Helpful answers
    9
    • August 27, 2020 at 8:52 PM
    • #19

    Der DTD parameter ist ein array:

    injectElements(...., ["chrome://allowhtmltemp/locale/allowhtmltemp.dtd", "chrome://messenger/locale/messenger.dtd"]);

    injectCSS() must be called multiple times, no array support.

    John Bieling / Matrix: TbSync / GitHub: jobisoft
    Thunderbird Add-on Support Engineer / Add-on Coordinator (MZLA)

    https://developer.thunderbird.net/add-ons/community

  • jobisoft
    Senior Member
    Reactions Received
    239
    Posts
    905
    Member since
    18. Aug. 2016
    Helpful answers
    9
    • August 27, 2020 at 8:56 PM
    • #20
    Code
    ChromeUtils.import("resource:///modules/gloda/mimemsg.js");

    Ich glaube die Datei gibts in 78 nicht mehr.

    John Bieling / Matrix: TbSync / GitHub: jobisoft
    Thunderbird Add-on Support Engineer / Add-on Coordinator (MZLA)

    https://developer.thunderbird.net/add-ons/community

Current app version

  • Thunderbird 155.0 veröffentlicht

    Thunder September 2, 2026 at 5:45 PM

Current 153 ESR version

  • Thunderbird 153.2.0 ESR veröffentlicht

    Thunder September 2, 2026 at 5:55 PM

Current 140 ESR version

  • Thunderbird 140.15.0 ESR veröffentlicht

    Thunder September 2, 2026 at 6:01 PM

No Advertisements

There are no advertisements here. Maybe you give the website owner (Alexander Ihrig - aka "Thunder") instead something to be able to finance these sites in the long run. Many Thanks!

Thank you for the support!

Coffee to be spent?

Donate now via Paypal*

*Forwarding to PayPal.Me

Thunderbird Mail DE
  1. Imprint & Contact
  2. Privacy Policy
    1. Cookie Policy
  3. Terms of Use
  4. Donation Call for Thunderbird
Help for this website
  • All website support articles
  • How to use website search
  • How to create a forums user account
  • How to create and edit a forums thread
  • How to reset your forums password
Copyright © 2003-2026 Thunderbird Mail DE

You are NOT on an official page of the Mozilla Foundation. Mozilla®, mozilla.org®, Firefox®, Thunderbird™, Bugzilla™, Sunbird®, Seamonkey®, XUL™ and the Thunderbird logo are (among others) registered trademarks of the Mozilla Foundation.

Powered by WoltLab Suite™