History
The c-client API was originally written by Mark Crispin at Stanford
University as a set of routines to support IMAP and SMTP from a main
program which would handle the user interface. In its original form, it
was written as the low-level routines that were to be used as part of a
Macintosh client.
The first IMAP client, MM-D (for "MM on Xerox D machines" -- MM was a
popular DEC-20 mail program) was written in Interlisp for Xerox Lisp
machines. At that time, there was no name for the embryonic Mac client,
but since it was the first one to be written in C instead of Lisp, it was
given a development name of "C client". This name became "c-client"
because that is the name of the subdirectory on UNIX where the source files
were stored.
To exercise the routines, a minimal main program which uses c-client,
mtest, was written. mtest has subsequently been extended so that it runs
on every platform that c-client is ported.
The real Mac client, was eventually written by Frank Gilmurrary and
Bill Yeager at Stanford using the autumn 1988 version of c-client and named
"MacMS". In the winter of 1988-89, Mark Crispin, who had changed jobs to
the University of Washington, developed MS as an MM-like text-based program
for UNIX and MailManager as a GUI-based program for NeXT machines.
The realization sunk in that this API needed its own name. As early
as spring 1989, there were at least four programs (mtest, MS, MailManager,
and MacMS) that used it. The name c-client thus became permanent.
In its history, c-client has undergone two major redesigns, both by
Mark Crispin who is now on the staff at the University of Washington.
The first major redesign added the following:
1) ANSI C calling conventions throughout to assist in function
argument type checking.
2) Vectoring mail access calls through "driver" methods; thus
providing transparent access to multiple types of mail
stores with the same call.
3) MIME support.
The second major redesign was part of the IMAP4 project. Many
c-client functions were extended with additional arguments and options.
The driver interface was also made simpler, with more work done by
driver-independent code.