QT6 Clone od Eudora 7, built from the manual.
  • Ada 47.2%
  • C++ 46.4%
  • C 5.5%
  • Shell 0.6%
  • Makefile 0.3%
Find a file
2026-11-10 16:04:04 +01:00
icons Find, SMTP, Personalities and the first half of IMAP 2026-11-09 14:00:03 +01:00
packaging Junk mail through bogofilter: what arrives in an account's In is scored into an X-Bogosity header, shown in a Junk column after Status, and junk goes to the account's junk mailbox on the server unless the sender is in an address book; bogofilter learns, in a task of its own, from that mailbox as spam and from the messages read in In as ham, each message once by its Message-ID, unlearnt when it changes side; Message > Junk (Ctrl+Shift+J) and Not Junk, also on the right button; Options > Junk Mail, off at first, threshold 99; the size column says KB 2026-11-10 11:23:48 +01:00
src An IMAP server that sometimes leaves a connection unanswered, as a balancer sending it to a backend that is gone, failed the check after 60 seconds, where Thunderbird and K-9 go on: the connection, TLS handshake and greeting now wait 15 seconds and are tried again, three times in all; a refused login or certificate is not tried again; a connection that was never greeted is dropped without waiting for a LOGOUT answer 2026-11-10 16:04:04 +01:00
third_party/litehtml GrumpyDove 0.9 beta: IMAP both ways, CardDAV and HTML without scripts 2026-11-09 21:36:39 +01:00
.gitignore SPEC.md stays private 2026-11-09 21:46:58 +01:00
grumpydove.gpr Options: Spell Checking, with Hunspell 2026-11-10 01:36:54 +01:00
LICENSE.md EUPL 1.2; About names the author and the repository 2026-11-09 21:40:03 +01:00
Makefile GrumpyDove 1.0.0-beta1: the Eudora features still missing are in 2026-11-10 13:57:24 +01:00
README.md GrumpyDove 1.0.0-beta1: the Eudora features still missing are in 2026-11-10 13:57:24 +01:00

GrumpyDove

A mail client in the manner of Eudora Pro for Windows, written in Ada and Qt 6.

Mailboxes are Maildir folders under ~/Mail. It reads and writes IMAP, sends with SMTP, keeps CardDAV address books, signs and encrypts with OpenPGP or S/MIME (through gpgsm), checks spelling with Hunspell, and shows HTML mail without scripts or remote styles, remote images only when asked.

This is a beta: version 1.0.0-beta1.

Getting a package

There are no ready-made packages: you build one on the machine that will use it, which takes a few minutes. A package fits the release it was built on, so build it on the same Debian or Fedora where you will install it.

make deb and make rpm install what building needs with apt or dnf, asking for your password through sudo.

Debian (13 and later)

sudo apt install git make
git clone https://git.keinpfusch.net/loweel/grumpydove.git
cd grumpydove
make deb
sudo apt install ./bin/grumpydove_*.deb

Fedora

sudo dnf install git make
git clone https://git.keinpfusch.net/loweel/grumpydove.git
cd grumpydove
make rpm
sudo dnf install ./bin/grumpydove-*.rpm

A package made once can be copied to other machines running the same release and installed there with the same last command.

Running

Start GrumpyDove from the applications menu, or with grumpydove in a terminal.

Account passwords are kept in a file encrypted to your own PGP key, the one for your own address, so you need it before adding an account. If you have none, make it with PGP > Generate Key Pair... or with:

gpg --full-generate-key

Mail lives in ~/Mail, the log in ~/.local/state/GrumpyDove/grumpydove.log.

File > Import copies the mail of Thunderbird, found by itself, or of mbox files, Maildirs and Eudora folders into new mailboxes under Local > Imported, and vCard files into the Address Book; the originals stay as they are.

Junk mail is filtered with bogofilter (Tools > Options > Junk Mail, off at first): what arrives in an account's In is scored, the score shown in the Junk column, and junk goes to the account's junk mailbox on the server. It learns from that mailbox and from the messages read in In, and from Message > Junk and Not Junk; its word list is in ~/.local/share/GrumpyDove/bogofilter.

The Address Book takes nicknames and groups, as Eudora's did: a nickname written in To, Cc or Bcc becomes its addresses when the message is queued, and the entries on the Recipient List are at hand in Message > New Message To, Forward To, Redirect To and Edit > Insert Recipient.

A message may be written with styles, from the formatting toolbar or Edit

Text: fonts, sizes, colours, alignment, indents, bulleted lists, links and horizontal lines. A styled message goes out as plain text and HTML together, or as one of them (Tools > Options > Styled Text); one without styles goes as plain text, as always. A reply to a styled message quotes it as an excerpt with a bar, as Eudora did. Images never come in, neither pasted nor quoted, and none go out. The Alternate signature may have styles too.

Tools > Options holds the settings, as Eudora's did. S/MIME needs gpgsm and your certificate imported through PGP > Keys > Import (a .p12 file); spelling needs a Hunspell dictionary, such as hunspell-it or hunspell-en-us.

Removing

sudo apt remove grumpydove      # Debian
sudo dnf remove grumpydove      # Fedora

Your mail in ~/Mail and your settings in ~/.local/share/GrumpyDove stay where they are.

Licence

GrumpyDove is licensed under the EUPL 1.2 (LICENSE.md), except:

  • icons/, the classic bitmaps from the released Eudora sources: BSD 3-Clause, © Computer History Museum (icons/LICENSE);
  • third_party/litehtml: BSD 3-Clause, with gumbo under the Apache License 2.0 (their LICENSE files).