Forward to Updated design notes | Back to Fetchmail Home Page | $Date$ |
These notes are for the benefit of future hackers and maintainers. The following sections are both functional and narrative, read from beginning to end.
A direct ancestor of the fetchmail program was originally authored (under the name popclient) by Carl Harris <ceharris@mal.com>. I took over development in June 1996 and subsequently renamed the program `fetchmail' to reflect the addition of IMAP support and SMTP delivery. In early November 1996 Carl officially ended support for the last popclient versions.
Before accepting responsibility for the popclient sources from Carl, I had investigated and used and tinkered with every other UNIX remote-mail forwarder I could find, including fetchpop1.9, PopTart-0.9.3, get-mail, gwpop, pimp-1.0, pop-perl5-1.2, popc, popmail-1.6 and upop. My major goal was to get a header-rewrite feature like fetchmail's working so I wouldn't have reply problems anymore.
Despite having done a good bit of work on fetchpop1.9, when I found popclient I quickly concluded that it offered the solidest base for future development. I was convinced of this primarily by the presence of multiple-protocol support. The competition didn't do POP2/RPOP/APOP, and I was already having vague thoughts of maybe adding IMAP. (This would advance two other goals: learn IMAP and get comfortable writing TCP/IP client software.)
Until popclient 3.05 I was simply following out the implications of Carl's basic design. He already had daemon.c in the distribution, and I wanted daemon mode almost as badly as I wanted the header rewrite feature. The other things I added were bug fixes or minor extensions.
After 3.1, when I put in SMTP-forwarding support (more about this below) the nature of the project changed -- it became a carefully-thought-out attempt to render obsolete every other program in its class. The name change quickly followed.
MTAs ought to canonicalize the addresses of outgoing non-local mail so that From:, To:, Cc:, Bcc: and other address headers contain only fully qualified domain names. Failure to do so can break the reply function on many mailers. (Sendmail has an option to do this.)
This problem only becomes obvious when a reply is generated on a machine different from where the message was delivered. The two machines will have different local username spaces, potentially leading to misrouted mail.
Most MTAs (and sendmail in particular) do not canonicalize address headers in this way (violating RFC 1123). Fetchmail therefore has to do it. This is the first feature I added to the ancestral popclient.
The second thing I did reorganize and simplify popclient a lot. Carl Harris's implementation was very sound, but exhibited a kind of unnecessary complexity common to many C programmers. He treated the code as central and the data structures as support for the code. As a result, the code was beautiful but the da
I maintain an open-source POP and IMAP client called fetchmail. It is
widely used in the Linux and open-source community, and is probably
the single most popular remote-mail client in that world. You can
find out more about this project at
<http://fetchmail.berlios.de/>.
In order to be able to do thorough regression testing before each release,
I collect test accounts on as many different kinds of POP3, IMAP, and
ODMR servers as possible. Because fetchmail is strictly conformant to the
remote-mail RFCs, many server developers have found fetchmail a useful
standards-conformance test.
I'm writing to request test accounts on your server. I support all flavors
of POP2, POP3, IMAP and ODMR with either plain-password, CRAM-MD5, NTLM,
GSSAPI, or Kerberos authentication. I also support SSL/TLS.
It would be very helpful if I could have a separate test account for
each protocol you support (that is, separate POP3, IMAP, and ODMR
accounts) so I can do automated regression testing without worrying
about mailbox race conditions.