tkbiff (2011-01-11)

tkbiff is a mail notification program. Besides doing what it is supposed to, tkbiff is also a nice example of a polished Tcl/Tk application. It's wonderfully configurable, well documented, and also serves as a Rosetta Stone for IMAP, POP, and file-based mail servers. Tkbiff is also portable to all of UNIX, Win, and MacOS and there's a fair amount of code to make that happen just right. (The Tcl language is portable but that doesn't mean that all programs are trivially portable!)

LES: Eh, looks good. But what a totally blunt approach. It created a .tkbiff file in my home folder, but it's not just configuration. It's the entire program! Someday I'll get around to reading all that and making it work. :-(

DL: I'm not sure 'blunt' is the right word to describe it but it certainly doesn't follow the traditional approach of making everything a pre-defined Preference. Instead, the entire GUI is there in your .tkbiff file! This reason for taking this approach is explained in Q1 of the FAQ:

While deciding if you agree, I ask you to think about your present email checker and ask yourself - Is there anything about it you'd like it would do differently but are unable to because there is no Preference to change it?

jima (2006-08-24): How about connecting to gmail from tkbiff?

Does anyone know if that is possible? (I am trying but not getting it to work).

RLH Is POP access enabled for your gmail account?

jima Yes it is, I checked it by using Outlook on it. I am getting help from DL, perhaps I am not setting the configuration properly.

DL It's either a bug in tls (I'm using 1.5.0) or my understanding of how to use it! I'll demonstrate:

Try entering the following 3 lines into tkcon:

 % package require tls
 % proc w {f} {fconfigure $f -blocking 0;fileevent $f readable {set ::event 0};vwait ::event}
 % set f [tls::socket -async 995]; w $f; puts [read $f]

All that code does is to open a secure connection to But it hangs waiting for an event. Forever.

If I run the same code (without the tls stuff) to a non-ssl pop server, it works fine. I see the pop greeting immediately. (I don't know of any public non-secure pop hosts; you'll have to substitute your own in the code below.)

 % proc w {f} {fconfigure $f -blocking 0;fileevent $f readable {set ::event 0};vwait ::event}
 % set f [socket -async 110]; w $f; puts [read $f]

If I open a connection to gmail WITHOUT the fileevent/vwait, it works (although it takes about a minute to complete the read):

 % package require tls
 % set f [tls::socket -async 995]
 % read $f

And if I point it at my company's secure pop server, it hangs!

I'm thoroughly confused but it sure looks like a tls issue.

deb I've never been able to get TLS connections to work in tkbiff, but using a pipe to the openssl connect command works fine for me with GMail and other servers. Here is the key line of my .tkbiff file:

 set protocol(connect) {open "|openssl s_client -connect $protocol(host):$protocol(port) -quiet 2> /dev/null" RDWR}

So I can connect to GMail okay, but it turns out to be not so useful anyway. The problem I find is that once it is presented a message through the POP interface, GMail seems to forget about it. The next time I poll, all the messages that showed up the previous time disappear, as if I had emptied the mailbox. I'm no expert on POP, but I think their server is not honoring RETR or something. Disappointing, because I love tkbiff.

DKF: Maybe consider using an IMAP interface instead, if one is supported? (I do not pretend to be knowledgable about GMail…)