PyThunderbird


Wolfgang Fahl

OsProject

OsProject
edit
id  pyThunderbird
state  active
owner  WolfgangFahl
title  pyThunderbird
url  https://github.com/WolfgangFahl/pyThunderbird
version  0.2.0
description  
date  2024-08-01
since  2020-10-24
until  

Motivation

Thunderbird uses mailbox format and an sqlite database for keeping track of the mails. How can this setup be accessed with Python?


Installation

pip install pyThunderbird
# alternatively if your pip is not a python3 pip
pip3 install pyThunderbird 
# local install from source directory of pyThunderbird 
pip install .

upgrade

pip install pyThunderbird  -U
# alternatively if your pip is not a python3 pip
pip3 install pyThunderbird -U


Demo

Usage

tbmail -h
usage: tbmail [-h] [-a] [-c] [-d] [--debugServer DEBUGSERVER]
              [--debugPort DEBUGPORT] [--debugRemotePath DEBUGREMOTEPATH]
              [--debugLocalPath DEBUGLOCALPATH] [-l] [-i INPUT] [-rol]
              [--host HOST] [--port PORT] [-s] [-V] [-u USER] [-m MAILID]
              [-ul USER_LIST [USER_LIST ...]] [-ci] [-f] [-v]

python based access to Thunderbird mail

options:
  -h, --help            show this help message and exit
  -a, --about           show about info [default: False]
  -c, --client          start client [default: False]
  -d, --debug           show debug info [default: False]
  --debugServer DEBUGSERVER
                        remote debug Server
  --debugPort DEBUGPORT
                        remote debug Port
  --debugRemotePath DEBUGREMOTEPATH
                        remote debug Server path mapping - remotePath - path on
                        debug server
  --debugLocalPath DEBUGLOCALPATH
                        remote debug Server path mapping - localPath - path on
                        machine where python runs
  -l, --local           run with local file system access [default: False]
  -i INPUT, --input INPUT
                        input file
  -rol, --render_on_load
                        render on load [default: False]
  --host HOST           the host to serve / listen from [default: localhost]
  --port PORT           the port to serve from [default: 8482]
  -s, --serve           start webserver [default: False]
  -V, --version         show program's version number and exit
  -u USER, --user USER  id of the user
  -m MAILID, --mailid MAILID
                        id of the mail to retrieve
  -ul USER_LIST [USER_LIST ...], --user-list USER_LIST [USER_LIST ...]
  -ci, --create-index   create an alternative index for the given users's
                        Thunderbird mailarchive
  -f, --force           force the creation of a new index even if one already
                        exists
  -v, --verbose         show verbose infos e.g. on startup [default: False]

Configuration

OsProject[edit]

OsProject
edit
id  pyThunderbird
state  active
owner  WolfgangFahl
title  pyThunderbird
url  https://github.com/WolfgangFahl/pyThunderbird
version  0.2.0
description  
date  2024-08-01
since  2020-10-24
until  

Motivation[edit]

Thunderbird uses mailbox format and an sqlite database for keeping track of the mails. How can this setup be accessed with Python?


Installation[edit]

pip install pyThunderbird
# alternatively if your pip is not a python3 pip
pip3 install pyThunderbird 
# local install from source directory of pyThunderbird 
pip install .

upgrade[edit]

pip install pyThunderbird  -U
# alternatively if your pip is not a python3 pip
pip3 install pyThunderbird -U


OsProject[edit]

OsProject
edit
id  pyThunderbird
state  active
owner  WolfgangFahl
title  pyThunderbird
url  https://github.com/WolfgangFahl/pyThunderbird
version  0.2.0
description  
date  2024-08-01
since  2020-10-24
until  

Motivation[edit]

Thunderbird uses mailbox format and an sqlite database for keeping track of the mails. How can this setup be accessed with Python?


Installation[edit]

pip install pyThunderbird
# alternatively if your pip is not a python3 pip
pip3 install pyThunderbird 
# local install from source directory of pyThunderbird 
pip install .

upgrade[edit]

pip install pyThunderbird  -U
# alternatively if your pip is not a python3 pip
pip3 install pyThunderbird -U


Usage[edit]

tbmail -h
usage: tbmail [-h] [-a] [-c] [-d] [--debugServer DEBUGSERVER]
              [--debugPort DEBUGPORT] [--debugRemotePath DEBUGREMOTEPATH]
              [--debugLocalPath DEBUGLOCALPATH] [-l] [-i INPUT] [-rol]
              [--host HOST] [--port PORT] [-s] [-V] [-u USER] [-m MAILID]
              [-ul USER_LIST [USER_LIST ...]] [-ci] [-f] [-v]

python based access to Thunderbird mail

options:
  -h, --help            show this help message and exit
  -a, --about           show about info [default: False]
  -c, --client          start client [default: False]
  -d, --debug           show debug info [default: False]
  --debugServer DEBUGSERVER
                        remote debug Server
  --debugPort DEBUGPORT
                        remote debug Port
  --debugRemotePath DEBUGREMOTEPATH
                        remote debug Server path mapping - remotePath - path on
                        debug server
  --debugLocalPath DEBUGLOCALPATH
                        remote debug Server path mapping - localPath - path on
                        machine where python runs
  -l, --local           run with local file system access [default: False]
  -i INPUT, --input INPUT
                        input file
  -rol, --render_on_load
                        render on load [default: False]
  --host HOST           the host to serve / listen from [default: localhost]
  --port PORT           the port to serve from [default: 8482]
  -s, --serve           start webserver [default: False]
  -V, --version         show program's version number and exit
  -u USER, --user USER  id of the user
  -m MAILID, --mailid MAILID
                        id of the mail to retrieve
  -ul USER_LIST [USER_LIST ...], --user-list USER_LIST [USER_LIST ...]
  -ci, --create-index   create an alternative index for the given users's
                        Thunderbird mailarchive
  -f, --force           force the creation of a new index even if one already
                        exists
  -v, --verbose         show verbose infos e.g. on startup [default: False]

Configuration[edit]

$HOME/.thunderbird/thunderbird.yaml[edit]

The yaml file has two entries per user

  • db: the path of the gloda (global-messages-sqlite)
  • profile: the path to the Thunderbird profile

$HOME/.thunderbird/thunderbird.yaml[edit]

The yaml file has two entries per user

  • db: the path of the gloda (global-messages-sqlite)
  • profile: the path to the Thunderbird profile

MacOS Example[edit]

In this example we try to make sure that the python library doesn't interfere with the running thunderbird.

joe:
  db: /Users/joe/Library/Thunderbird/Profiles/klm97bfn.default/gloda.sqlite
  profile: /Users/wf/Library/Thunderbird/Profiles/klm97bfn.default
kathy:
  db: /Users/kathy/Library/Thunderbird/Profiles/war97k3r.default/gloda.sqlite
  profile: /Users/kathy/Library/Thunderbird/Profiles/war97k3r.default

gloda script[edit]

If you put this in your local bin directory you can call it from the command line any time you'd like to get an updated gloda that is a copy of the global-messages-db.sqlite you need to adapt the Profile location

#!/bin/bash
# WF 2021-09-22
# copy the thunderbird gloda sqlite database
cd /Users/joe/Library/Thunderbird/Profiles/klm97bfn.default
cp -p  global-messages-db.sqlite gloda.sqlite

Linux example[edit]

in this example the server runs from an rsync'ed backup of the thunderbird files of the different users

user123:
  db: /hd/diskAlpha/backup/siteAlpha.com/user123/Library/Thunderbird/Profiles/randomID1.default/global-messages-db.sqlite
  profile: /hd/diskAlpha/backup/siteAlpha.com/user123/Library/Thunderbird/Profiles/randomID1.default
user456:
  db: /hd/diskBeta/backup/siteBeta.com/user456/Library/Thunderbird/Profiles/randomID2.default/global-messages-db.sqlite
  profile: /hd/diskBeta/backup/siteBeta.com/user456/Library/Thunderbird/Profiles/randomID2.default
🖨 🚪