1. Georg Sauthoff
  2. trysterobiff


trysterobiff /

Filename Size Date modified Message
35.1 KB
initial commit of the non-polling IMAP new-mail notifier
5.1 KB
Disable certain Qt4 only calls when compiling with Qt5.
13.7 KB
update email contact info
3.5 KB
update email contact info
4.3 KB
unfold long header lines
1.0 KB
add support for RFC2047 (Message Header Extensions for Non-ASCII Text)
75 B
add support for RFC2047 (Message Header Extensions for Non-ASCII Text)
1.2 KB
update email contact info
1.1 KB
update email contact info
1.3 KB
update email contact info
1.1 KB
update email contact info
5.4 KB
update error message to include .ini instead of .cfg
629 B
add support for RFC2047 (Message Header Extensions for Non-ASCII Text)
248 B
added missing gui.qrc
133 B
initial commit of the non-polling IMAP new-mail notifier
2.3 KB
update email contact info
1.4 KB
update email contact info
2.1 KB
update email contact info
957 B
update email contact info
36.1 KB
initial commit of the non-polling IMAP new-mail notifier
6.0 KB
add IMAPD host info to menu
1.9 KB
update email contact info
1.5 KB
add --settings DIR option (change .conf extension to .ini)

Trysterobiff is a cross-plattform non-polling IMAP new-mail systray notifier.

Instead of polling it uses the IDLE extension of IMAP. With the IDLE extension an IMAP server immediately sends mailbox status updates to the client. Using this mechanism you really get notified of new mail as fast as possible.

In comparison to that, with a polling client there is a time-window where a new mail arrives at the server and the next scheduled polling.

Because of this property Trysterobiff is also called Workaholic Biff.

Besides visual notifications it supports executing external commands on new mail arrival.

Trysterobiff is written in C++ and uses the Qt library (version 4.x). It is licenced under the GPL v3+.

2011-01-08, 2013-03-05


I appreciate feedback and comments:



You need to have Qt installed, version >= 4.3. It was tested with version 4.6. It should also compile and run with Qt 5.

Generate the Makefile via:

$ qmake gui.pro


$ qmake "CFG=release" gui.pro

(see gui.pro for more alternatives)

On some systems, the Qt version is encoded in the qmake name, e.g. qmake-qt4 or qmake-qt5.

And then compile it via:

$ make

The resulting binary can be called via:

$ ./trysterobiff &


The repository contains a commented config file template, which includes all available options.

Copy it to the right location:

$ cp trysterobiff.ini $HOME/.config/trysterobiff.ini

Restrict the read access:

$ chmod 600 $HOME/.config/trysterobiff.ini

And adjust the default settings (hostname etc.):

$ vim $HOME/.config/trysterobiff.ini


Trysterobiff only supports IMAP over SSL/TLS and only accepts certificates that can be checked against a known CA root certificate. It is possible to configure an additional CA root certificate, in case that it is not available systemwide.

If you have problems to identify the root SSL-certficate the server certificate was signed with, check out the notes at the end of:


Mouse control

Single-clicks on tray icon:

  • left - re-display preview bubble
  • middle - re-connect to server (may take 1-2 seconds)
  • right - show menu


Gmail IMAP access has following limitation, which matters to trysterobiff:

Gmail IMAP1 is a fairly complete implementation of IMAP, but the following features are currently unsupported:

  • \Recent flags on messages. [..]'

Trysterobiff detects this and on connecting to a GMail-IMAPD, it will automatically use search-for-UNSEEN messages.

You can explicitly configure this behavior for other IMAP daemons, too, or you can even disable the Gmail autodetection (cf. trysterobiff.conf example).

When connecting to non-Gmail-IMAPDs, Trysterobiff searches by default for RECENT messages (RECENT messages are a subset of the UNSEEN ones).

With that work-around Trysterobiff behaves like this when connected to a gmail-imapd:

  • When reading messages in the gmail web-client, gmail does NOT immediately push the status change (i.e. read -> unread attribute change of a message) over imap. But gmail pushes every 5 minutes a regular status update. On that update Trysterobiff has the chance to update notifications. Thus, in the best, worst or average case this update is immediate, 5 or 2.5 minutes late.
  • When using the android gmail app, you have to hit the sync button (or wait for an automated sync) until changes are propagated via IMAP. But the sync then immediately pushes a new status over imap.
  • On incoming new mail gmail nearly immediately pushes a status update over IMAP.
  • When deleting messages (via a concurrent imap connection) gmail also pushes a new status immediately.

Thus, only the first point is a real limitation of the workaround. 'Standard' IMAP servers that has RECENT flag support don't have that limitation, of course.

Multiple Account

If you want to use multiple Trysterobiff instances (for multiple IMAP accounts), just specify an alternative config path:

$ trysterobiff --settings $HOME/.config/accountb

In the above call $HOME/.config/accountb/trysterobiff.ini is used as config file.

Alternatively, you can set the XDG_CONFIG_HOME environment variable, e.g.:

$ XDG_CONFIGHOME=$HOME/.config/accountb trysterobiff

Or you can even change your HOME environment variable:

$ HOME=/home/juser/accountb ./trysterobiff

(for using /home/juser/accountb/.config/trysterobiff.ini)

Tested IMAP-Servers


  • Note that the Qt API documentation specifies that the bubble display feature is not available on Mac OSX ...

  • The included icons are from the tango project. They are Public Domain.