LogoLogo
  • About Thunderbird
  • Contributing to Thunderbird
    • Getting Started Contributing
    • Setting Up A Build Environment
    • Building Thunderbird
      • Windows Build Prerequisites
      • Linux Build Prerequisites
      • macOS Build Prerequisites
      • Artifact Builds
    • Codebase Overview
      • Account Configuration
      • Address Book
      • Chat Core
        • Notifications
        • Message Styles
        • Keyboard shortcuts
        • Chat Core Protocols
        • Contacts
      • Mail Front-End
    • Tutorials and Examples
      • Hello World Example
      • Thunderbird Live Development Videos
    • Fixing a Bug
      • Bug Triaging 101
        • Bug Status Classicification
        • Bug Types
        • Garbage Collection
        • Narrow the Scope
      • Using Mercurial Bookmarks
      • Using Mercurial Queues
      • Lint and Format Code
      • Using ESLint to Format Javascript Code
      • Try Server
      • Landing a Patch
      • Care and Feeding of the Tree
    • Testing
      • Running Tests
      • Adding Tests
      • Writing Mochitest Tests
  • Planning
    • Roadmap
    • Android Roadmap
    • Supported Standards
  • Add-on Development
    • Introduction
    • What's new?
      • Manifest Version 3
    • A "Hello World" Extension Tutorial
      • Using WebExtension APIs
      • Using a Background Page
      • Using Content Scripts
    • A Guide to Extensions
      • Supported Manifest Keys
      • Supported UI Elements
      • Supported WebExtension APIs
      • Thunderbird's WebExtension API Documentation
      • Thunderbird WebExtension Examples
      • Introducing Experiments
    • A Guide to Themes
    • Developer Community
    • Documentation & Resources
      • Tips and Tricks
    • Add-on Update Guides
      • Update for Thunderbird 128
      • Update for Thunderbird 115
        • Adapt to Changes in Thunderbird 103-115
      • Update for Thunderbird 102
        • Adapt to Changes in Thunderbird 92-102
      • Update for Thunderbird 91
        • Adapt to Changes in Thunderbird 79-91
      • Update for Thunderbird 78
        • Adapt to Changes in Thunderbird 69-78
      • Update for Thunderbird 68
        • Adapt to Changes in Thunderbird 61-68
      • How to convert legacy extensions?
        • Convert wrapped WebExtensions to modern WebExtensions
        • Convert legacy WebExtensions to modern WebExtensions
        • Convert legacy overlay extension to legacy WebExtension
        • Convert legacy bootstrapped extension to legacy WebExtension
  • Releases
    • Thunderbird Channels
    • Release Cadence
    • Uplifting Fixes
    • Feature Flags
    • Tracking Fixes for Releases
    • Contributing to Release Notes
Powered by GitBook
On this page
  • Mail tab types
  • Accessing tabs
  • Mail windows
  • about:3pane
  • Folder pane
  • Thread pane
  • Message pane
  • Account central
  • about:message

Was this helpful?

Edit on GitHub
Export as PDF
  1. Contributing to Thunderbird
  2. Codebase Overview

Mail Front-End

A.K.A. the 3-pane tabs and message tabs/windows

PreviousContactsNextTutorials and Examples

Last updated 2 months ago

Was this helpful?

In January 2023 the mail front-end was rebuilt from scratch, replacing what evolved from the original Netscape front-end. This is a developers' guide to the new UI.

Mail tab types

The mail front-end consists of two types of tabs (and a standalone window, more about that later) – the 3-pane tab mail3PaneTab and the message tab mailMessageTab. These are defined in and provide the tabInfo objects for tabmail to control. Most code from outside the tabs will go through here in some form, although knowing the specific details should be unnecessary.

Each mail tab tabInfo object has these read-only properties:

  • chromeBrowser – This is a XUL <browser> object which displays the tab's contents, either about:3pane or about:message. As with any <browser> object you can access the displayed page with the contentWindow and contentDocument properties.

  • browser and linkedBrowser – Both refer to the XUL <browser> currently displaying content (an email message or a web page) to the user, or null if there isn't any.

  • message – The currently displayed message as an nsIMsgDBHdr, if there is one.

  • folder – The folder containing the currently displayed message, an nsIMsgFolder.

Accessing tabs

If the mail tab you're interested in is the current tab, the following properties of tabmail point to it:

  • currentTabInfo – The tabInfo object described above.

  • currentAbout3Pane – The window object of the page displayed in the chromeBrowser, if the current tab is a 3-pane tab.

  • currentAboutMessage – The window object of the message display page, which for message tabs is the page displayed in the chromeBrowser, and for 3-pane tabs a page within that.

If it's not the current tab, you can get the tabInfo object from tabmail and use the properties listed in the previous section to access it.

Mail windows

The standalone mail window also contains a XUL <browser> displaying about:message. The browser can be accessed from the window's messageBrowser property.

about:3pane

Folder pane

The folder pane displays the accounts and folders within them. Various modes of display are available.

Thread pane

The thread pane displays the list of messages in the current folder, and the Quick Filter bar for filtering those messages.

Message pane

This mesage pane contains more XUL <browser>s for displaying various things:

  • webBrowser – displays web content in a child process as Firefox does.

  • multiMessageBrowser – displays messages if more than one is selected.

  • messageBrowser – displays a single message using about:message.

Only one is visible at any given time.

Account central

If an account is selected in the folder pane instead of a folder, yet another <browser>, accountCentralBrowser – displays Account Central, a page of various things you can do in Thunderbird.

about:message

Message contents themselves are displayed in a <browser> (if you're counting, we're now three deep) which can be accessed by the content property of an about:message window.

about:3pane is the main UI that users see when Thunderbird starts: the folder pane, the thread pane, and the message pane. It lives in the tree as and similarly named , and files.

about:message is all of the UI that displays a single message, including the message headers and attachments. It is used as the message pane in about:3pane and by itself as a message tab or window. Like about:3pane it lives in the tree as , , and files.

mailTabs.js
about3Pane.xhtml
JS
CSS
Fluent
aboutMessage.xhtml
aboutMessage.js
messageHeader.css
about3Pane.ftl