Email Clients
If someone typed something
like date +"%Y" at his terminal, assuming that he
used the
Gregorian calendar, he would probably see something like
2005. If the same person was to read
RFC196,
he would probably see July 20, 1971 near the beginning.
Only 13 years after the discovery of
the Bessemer
process we had
the first
transcontinental railroad, after more that 30 years of email,
all email clients suck.
Anyone who uses email for something else than remote backups knows what I'm talking about. If you need to read your emails from more than one location you can probably forget all the nice "native" clients. But webmails requires heavy usage of the mouse, lacks many important features like a usable spell-checker and incremental search. All the webmail service provider have EULA that requires your first born and a pint of fresh blood a month. Namespace pollution is another problem, I don't want my email to be y._kk_gingras234252_asd@example.com, I want ygingras@ygingras.net. So called native clients have pretty UI but when some important feature is needed we feel that they don't want to mess too much with that UI so the feature get postponed. Spam is a plague but a great thinker found a solution a few years ago already.
The solution (for the UI part) is dead simple: add a mark as spam button. There are tons of great Bayesian filters out there. They all perform pretty well since the math is so simple. I use spamoracle because is has an easy to tune engine, an tri-state classification and is pretty fast. The only problem is that it needs to be feed a mail corpus that most email client makes hard to build. Keeping in mind that I want to access my mails from several places and that all webmails suck badly, I turned to gnus. Before anyone even think of using gnus, he should be warned that gnus is ugly. Well, we can event say that it is really disgustingly disfigured. This client is excessively configurable, the manual features a 10 pages chapter on starting gnus. Nevertheless, this is the most usable client I can find. The first thing is that we configure it with either Emacs customize mode or with Lisp expression. Emacs built-in regexp engine and visual-regexp editor will replace 200 click made filters with a pretty expression in no time:
(setq nnmail-split-fancy
'(| (to "sbcl-devel@" "sbcl-devel")
(to "gnu-arch-users@gnu\\.org" "Arch")
(to "mslug@iro\\.umontreal\\.ca" "MSLUG")
("Subject" "Bacula: Backup" "bacula")
(to "\\b\\([A-Za-z0-9\\-]+\\)-list@lists\\.alioth"
"alioth.\\1")
(to "\\b\\([A-Za-z0-9\\-]+\\)@securityfocus\\.com" "sec.\\1")
(: spam-split)
"inbox"))
Some nice feature here is the dynamic folder (groups in gnus parlance) name creation. The messages are presented with thread but with bonus that you can re-thread a message if for example someone is using a broken client that doesn't know about threading yet. Filtering is excellent, we can filter for a time slice but once we have the interesting messages we can include the whole parent threads. Now lets talk about spam. Gnus have a good spam integration. It will gladly put what your filter say it spam in a spam folder and let the rest flow in your inbox. Did I just talk about tri-state classification. The bad news is that I wasn't able to find a tri-state option for integration with spamoracle. The good news is that I was able to implement it in 5 minutes by replacing
(when (re-search-forward "^X-Spam: yes;" nil t)
spam-split-group))
by
(cond ((re-search-forward "^X-Spam: yes;" nil t)
"obvious")
((re-search-forward "^X-Spam: no;" nil t)
nil)
(t "suspicious"))
in spam-check-spamoracle. Now we can tell gnus that
obvious and suspicious are spam-folders. When
we do that gnus automatically marks all the message as spam when we
enter those folders. When we quit the folder, message for which we
removed the spam mark are moved to our inbox, the other ones goes to
the spam folder, aka filter training ground. When by mistake a spam
falls in our inbox, the shortcut M-d will mark it as spam.
That way our spam corpus is not corrupted even if we get false
positives (ie a good email marked as spam) and we can retrain it as
soon as we hit a false negative (ie a spam in our inbox), even if we
don't feel like checking for false positives at moment. Using
tri-state we maximize our time. The obvious folder can
be scanned really fast and not too often. The suspicious one is
where we look for borderline message that might require instant
re-training of the filter. We can also keep a hard-ham
and a hard-spam folder for emails that gets wrong
classification and re-train the filter twice with those.
This is not to say that gnus is a good email client. I hate it and I still think that all email client sucks. It is only a bit better and lot more customizable than other. Did I mention that it can be set to use an English spell-checker when I send emails to sbcl-devel and a french one when I write to my mother? By the way I don't write that often to my mother since she can't stand how all email clients suck.
