Translation(s): English

Icedove is the Thunderbird email client rebranded by Debian.


Display Email User Agent

External Editor for Writing Mails

Icedove seems impossible to send mails via STARTLS after installation of libnss 3.14-1


Take a look at

Create Own Mail Headers

With editing (or creating) your own ~/.icedove/user.js file you are able to create own, not already shipped Mail Header entrys. It have to looks like that. The entry '{custom headers}' is a comma-separated list of the custom headers you want to be available. "Sender,X-Y" adds the Sender: and X-Y: headers, for example.

// This is a coment
user_pref("mail.compose.other.header", "{custom headers}");

In detail take a look at the following example. More infos on this on mozillaZine

// my own Icedove settings in $HOME/.icedove/user.js
// add these headers to the list of possible headers
user_pref("mail.compose.other.header", "X-Debbugs-CC,X-Debbugs-No-Ack");

Reporting Bugs

Sometimes Icedove doesn't doing things as expected or some error happen. Then you need help or want to report the issue. Before you do this please visit the web pages Bugs in icedove,calendar-google-provider, calendar-timezones, icedove-dbg, icedove-dev, iceowl-extension and/or icedove-l10n-* and check if you find a solution for your problem or some other bug is right now reported. Please do this careful because errors reported twice take a lot of time to coordinate!

Your problem isn't there or you want to provide extra information to an already opened bug? You can report it best with reportbug, really! :-) But you can also use a EMail client to send bug reports, to do this please visit Bugs and Reporting.

Before you send your report, please check if you can append some useful information for the developer! Please read the following chapter for this. If you use a version from testing or unstable/experimental please check also if a similar problem is reported to the Bugzilla on Mozilla and provide the URL to that bug entry. This helps the developer (and the reporter too) to get automatic notifications if the status of the upstream bug has changed. If you are an advanced user and you can't find the bug in the database on Mozilla you can start there your bug report and the open a bug on the Debian with the upstream URL to this bug. This helps the package maintainers too.

And if you are an expert and can help to scaling down the bug list any help is appreciated! If you can provide some patches to improve icedove or some other package please don't hesitate to write a mail to the packages maintainer!


Sometimes you need some debug information for tracking down problems, for example to give the maintainer more useful information if you have some trouble with Icedove. To get a digestible output with gdb while debugging the application (Icedove and used libraries) must have so named "debugging symbols". For the normal use this symbols inside the application are not necessary. To track file actions there is the possibility to use strace to monitor this.


There some dependencies to get a proper debug output. May be you need to install some additional packages. Once the applications with the debugging symbols and the tools to get the output while debugging. Both are necessary. You will need to install the following packages.

additional packages

gdb icedove-dbg strace

Starting Debugging

If these packages are installed you have to start Icedove from a terminal, this is quite simple, you have to give an argument '-g' to the starting wrapper script of Icedove if the version is < v17.0 or to the binary of Icedove if the version > 10.0 (Wheezy). If Icedove is crashing down please also append '-safe-mode' to prevent the usage of any extension inside Icedove.

user@pc:~ $ icedove -g [-safe-mode] 2>&1 | tee /tmp/gdb.log.txt

This starts the gdb with icedove as program to debug and logs all the output to /tmp/gdb.log.txt. The file can be send to a bug report as attachment. This is mostly needed if your Icedove is crashing at some action. Please check the output of the gdb! If you see something like no debugging symbols found check the packages you have installed. With no debugging symbols it's worthless to go further! The next step is to start the Icedove inside the gdb with the "run" command.

(gdb) run

The start of Icedove is taking a little time, after a few seconds you will see (hopefully) the normal GUI screen of Icedove. In the terminal there must be some information to see, in normal case the starting and terminating of Threads, this should looks like this.

user@pc:~ $ icedove -g [-safe-mode] 2>&1 | tee /tmp/gdb.log.txt
/usr/lib/icedove/ -g /usr/lib/icedove/icedove-bin
/usr/bin/gdb  --args /usr/lib/icedove/icedove-bin
GNU gdb (GDB) 7.4.1-debian
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
For bug reporting instructions, please see:
Reading symbols from /usr/lib/icedove/icedove-bin...Reading symbols from /usr/lib/debug/usr/lib/icedove/icedove-bin...done.
(gdb) run
Starting program: /usr/lib/icedove/icedove-bin 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/".
[New Thread 0x7fffe5993700 (LWP 9761)]
[New Thread 0x7fffe4ad0700 (LWP 9762)]
[New Thread 0x7fffe42cf700 (LWP 9763)]
[New Thread 0x7fffe36ff700 (LWP 9764)]
[New Thread 0x7fffe23ff700 (LWP 9765)]
[New Thread 0x7fffe1bfe700 (LWP 9766)]
[New Thread 0x7fffe03f6700 (LWP 9767)]
[New Thread 0x7fffdf7ff700 (LWP 9768)]
[New Thread 0x7fffdeffe700 (LWP 9769)]
[New Thread 0x7fffddfff700 (LWP 9770)]
[New Thread 0x7fffdc0ff700 (LWP 9771)]
[Thread 0x7fffe03f6700 (LWP 9767) exited]
[Thread 0x7fffdeffe700 (LWP 9769) exited]

If a crash occurs and Icedove stops working and quits, it's possible to get a backtrace of this. For this run the command bt in the terminal there the gdb runs. Remind that icedove is programmed as a multithreaded program, because of this we want to see all these threads. For more information about gbd around this take a look on How to get a backtrace.

(gdb) thread apply all bt

This gives out a collection of the last status from the stack. This information is needed if you reporting errors with a crashing Icedove.


In some special cases a crash of icedove can produce a crash of your X-Server. If this happen you have to start your icedove from a screen session. Without this you can't see the output of the backtrace because the terminal is also cleaned up while the X-Server is crashed. After you relogin to your X-Sessions restart your terminal and reattach the screen session with screen -r.

Debugging of Filesystem Activity

It is also possible to see what Icedove is trying do on the filesystem. For this you can use the tool strace. For this Icedove must also started from a terminal. strace logs every system call Icedove makes, and this is a lot! So it is useful to log directly to a file. Note that the file will growing very fast! Best practise is to write the file to the /tmp folder. The file will be dropped if you turn off your PC.

user@pc:~ $ strace -e file -f -s2048 -o /tmp/icedove_dgb.txt icedove

Debugging Icedove Activity

The activity of icedove itself can be also logged. For this you have to tell icedove what component with which level (1 to 5, but just use always 5!) into which file you are want to log. This can be done from the CLI (Command Line Interface -> the console) or via extra start script nor extra setting. Possible components are the MCD (MissionControlDesktop), SMTP or IMAP.

For example to log the MCD with level 5 to ~/icedove-mcd.log from the console do this

user@pc:~ $ NSPR_LOG_MODULES=MCD:5 NSPR_LOG_FILE=~/icedove-mcd.log icedove

Attention! The log file can be growing fast and getting big. If you want to send this file to a bug report don't forget it to pack!

You can also put you requirements to a extra file and export/unexport the variables. You may want to do this

# just execute this script to setup this variables
# other options for NSPR_LOG_MODULES are
#       SMTP or
#       IMAP

export NSPR_LOG_FILE=~/icedove-dbg.txt


Right now the latest version in for Icedove is 10.0.12-1 that is the same version that are used in Testing/Wheezy. If you wanna use this you have to add the Debian backport repository to your sources and just run an upgrade or reinstall icedove. Locales for this version are also available.

Mike Hommey provides also unofficial backports from the release 10.0.x of Icedove. You can also install these versions to the current Debian stable release. Please visit for further instructions and information. For locales support you can install the related language direct from the wheezy pool.

Newer versions then release 10.0.x probably will never be available for Squeeze because of dependencies that can't be solved for squeeze.

Known Problems

There are some problems that needs a lot of time to work on or some rethinking.

Icedove Package Development

Cloning and Updating the Repository

The sources of Icedove Debian package are within a git repo on They're maintained using git-buildpackage. If you want to help or take a look inside you need to install some tools:

additional packages

git git-buildpackage git-pbuilder cdbs devscripts git-email

Icedove is one of the bigger packages with a lot of source code which have to be prepared to be buildable on every platform. Mostly with every major update on the Mozilla Thunderbird package the build for almost all platforms breaks. Any help to fix any build problems are much appreciated! Also any help to fight lintian issues! If you want to help please don't hesitate to write a mail to

If you've found a fix for a bug you can build a patch that is then appliable with the 'git am' command. Use the following work flow to create such patches.

Be sure you have checked out the current git of icedove, if not done yet, just use git-buildpackage with the gbp-clone command instead of manual git commands. This will make sure the necessary branch tracking is set up.

$ gbp-clone git://

If you already have a local clone of the repo just update your clone. Also, use the gbp-pull command from git-buildpackage. This ensures that all the needed branches from remote get updated.

$ gbp-pull
gbp:info: Branch 'master' is already up to date.
gbp:info: Updating 'upstream'
gbp:info: Branch 'pristine-tar' is already up to date.

Patching the upstream sources

Icedove uses the Debian Source 3.0 (quilt) format. In order to patch the upstream source you need to create a patch in debian/patches/. This is simplest when creating a patch queue. git-buildpackage will do the most of the needed steps. To start verify that your local repo is clean (check with 'git status') and you are on the 'master' branch. Let's start.

1. Import the patch queue

That imports the debian patch queue from the directory debian/patches on top of the source and switches to the branch 'patch-queue/master'.

user@host:~/gitprojects/icedove [master] $ gbp-pq import
gbp:info: Trying to apply patches at 'aa5491b2e4141b0ec1f829c1d6c003650a0000c3'
Switched to branch 'patch-queue/master'
gbp:info: Patches listed in 'debian/patches/series' imported on 'patch-queue/master'
user@host:~/gitprojects/icedove [patch-queue/master] $

2. Modify the source as you wanted, for example improve something on the sources of Icedove/Thunderbird

For example change the file debian/icedove-branding/thunderbird-branding.js to point the News website to

user@host:~/gitprojects/icedove [patch-queue/master] $ vi debian/icedove-branding/thunderbird-branding.js
 ... # make your changes
user@host:~/gitprojects/icedove [patch-queue/master] $ git diff
diff --git a/debian/icedove-branding/thunderbird-branding.js b/debian/icedove-branding/thunderbird-branding.js
index 7caf6b6..39256ad 100644
--- a/debian/icedove-branding/thunderbird-branding.js
+++ b/debian/icedove-branding/thunderbird-branding.js
@@ -8,6 +8,6 @@ pref("mailnews.start_page.welcome_url", "about:");
 // start page override to load after an update
 //pref("mailnews.start_page.override_url", "chrome://messenger/content/start.xhtml");
-pref("mailnews.start_page.override_url", "about:");
+pref("mailnews.start_page.override_url", "");
 pref("app.vendorURL", "");

3. Commit your changes with the '-s' option, please fill in a useful commit message!

user@host:~/gitprojects/icedove [patch-queue/master] $ git commit -s debian/icedove-branding/thunderbird-branding.js
  1 thunderbird-branding.js: change the mailnews URI to
  3 Signed-off-by: Peter Petersen <>
  5 # Please enter the commit message for your changes. Lines starting
  6 # with '#' will be ignored, and an empty message aborts the commit.
  7 # Explicit paths specified without -i nor -o; assuming --only paths...
  8 # On branch patch-queue/master
  9 # Changes to be committed:
 10 #   (use "git reset HEAD <file>..." to unstage)
 11 #
 12 #   modified:   debian/icedove-branding/thunderbird-branding.js

4. Export the patch queue

To do this just use gbp-pq export from git-buildpackage. That exports the debian specific patches into a quilt patch series and change back to the 'master' branch.

user@host:~/gitprojects/icedove [patch-queue/master] $ gbp-pq export
gbp:info: On 'patch-queue/master', switching to 'master'
Switched to branch 'master'
gbp:info: Regenerating patch queue in 'debian/patches/'.
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#       modified:   debian/patches/debian-hacks/Add-another-preferences-directory-for-applications-p.patch
... # you will see more of modified files, this is a know error in git-buildpackage !!! Read further!
#       modified:   debian/patches/system-libs/Allow-to-build-against-system-libffi.patch
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#       debian/patches/thunderbird-branding.js-change-the-mailnews-URI-to-m.patch
no changes added to commit (use "git add" and/or "git commit -a")

After this git-buildpackage has put the new generated into the directory debian/patches/.

5. Commit the new patch to the Icedove packaging repository

The next step is now to commit this patch (and only this patch!) but also the patch series (debian/patches/series) to git. Please please ignore the other modified patches, don't commit thees changes! The other noise comes from a known issue of git-buildpackage and will be fixed in the future.

user@host:~/gitprojects/icedove [patch-queue/master] $ git add debian/patches/thunderbird-branding.js-change-the-mailnews-URI-to-m.patch
user@host:~/gitprojects/icedove [patch-queue/master] $ git commit debian/patches/thunderbird-branding.js-change-the-mailnews-URI-to-m.patch debian/patches/series
  1 changing the News URI from 'about' to ''
  3 Signed-off-by: Peter Petersen <>
  5 # Please enter the commit message for your changes. Lines starting
  6 # with '#' will be ignored, and an empty message aborts the commit.
  7 # On branch master
  8 # Your branch is ahead of 'origin/master' by 1 commit.
  9 #
 10 # Changes to be committed:
 11 #   (use "git reset HEAD^1 <file>..." to unstage)
 12 #
 13 #   new file:   debian/patches/thunderbird-branding.js-change-the-mailnews-URI-to-m.patch
 14 #
 15 # Changes not staged for commit:
 16 #   (use "git add <file>..." to update what will be committed)
 17 #   (use "git checkout -- <file>..." to discard changes in working directory)
 18 #
 19 #   modified:   debian/patches/debian-hacks/Add-another-preferences-directory-for-applications-p.patch
 20 #    .... more of modified files

Now you can clean up all of this modified marked files because we don't want them.

user@host:~/gitprojects/icedove [master] $ git co -f
Your branch is ahead of 'origin/master' by 1 commit.
user@host:~/gitprojects/icedove [master] $ git st
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
nothing to commit (working directory clean)

6. Extract your last changes and mail them to the maintainers

Just use git-email to provide your patch(es) to

user@host:~/gitprojects/icedove [master] $ git format-patch HEAD~1