Change Notes for things later than this file: See file ChangeLog Change Notes for 2.2: Rayan didn't write them ? Change notes for 2.1: Configuration: The old "transport" method in the configuration is now called "routes". At the same time, the MAILSHARE/db/hosts.transport file was renamed MAILSHARE/db/routes. Renamed the MAILSHARE/db/localdelivery file to MAILSHARE/db/localnames. Added the MAILSHARE/db/otherservers file. In a multi-MTA cluster, it is intended to hold the names of all the *other* MTA hosts. The BITNET handling was improved a bit. The login to uid and uid to login map caches are flushed after each message. The (now) "routes" file can take a new directive: delay!. This will put the address in a hold queue with an appropriate timeout set. The logging was rationalized. An awk script to process the router log (and produce something that can be turned into bills, for illustration only of course :-), is in utils/zmstats. The PUNTHOST and SMARTHOST variables can be set (e.g. in zmailer.conf) to declare a host to forward to if a local or remote (respectively) address is unresolvable. Router: Decreased threshold on Received: headers from 100 to 50 Added new databases (actually, made them visible): pwuid maps uid to login name (mnemonic: getpwuid) pwnam maps login name to uid (mnemonic: getpwnam) headers maps header field name to descriptor Added new "header" database type, used for an internal database which configures the RFC822 header parser. This type is unlikely to be used in any other context. It is used to define/select/deselect the non-essential RFC822 headers to be parsed and interpreted by the router. Added new "squirrel" builtin function. It sets the kinds of events that cause a message to be copied into the POSTOFFICE/postman directory. The list of events are: breakin, badheader, illheader, nochannel, nosender. The latter three almost never happen. Usage is "squirrel { [-] }" to enable/disable the flags associated with the events. Test-and-Lock each mail message before the router starts processing it, and unlock it after the router is done. This allows concurrent routers. Added an "envelopeinfo" global variable in the configuration file, defined (by the builtin rfc822 function) as a property list of the following elements: file message file name message-id the message-id uid the user id of the owner of the message file gid the group id of the owner of the message file size the message size (header + body) in bytes headersize the message header size in bytes bodysize the message body size in bytes now the time the router started processing the message (in seconds sinze epoch) delay the number of seconds the message had been queued resent "yes" or "no" indicating whether Resent- headers exist trusted "yes" or "no" indicating whether file owner is trusted furthermore every envelope header without address semantics will be added to the list, typically: with RFC822 Received header "with" value. via RFC822 Received header "via" value. rcvdfrom The host of the last MTA to touch the message. Scheduler: Fixed some systemic problems in the scheduler algorithms; it was possible to run into a situation where some set of messages would block another set of messages. This was fixed by imposing a fair roundrobin scheme for randomly selected-for-retry messages that are deferred due to resource starvation. In other words, the randomness is enforced. Transport Agents: The "mailbox" transport agent program takes a "-l file" command line argument. All its deliveries will be logged to that file. Improved the logging done by the SMTP client program. SMTP Server: The "smtpserver" program takes a "-l file" command line argument. All incoming SMTP conversations will be logged to that file. Added the 8-bit SMTP extension verbs as synonyms for the 7-bit ones. I think this is sufficient for full conformance with the to-be-RFC proposal. No translation capability is provided, as yet. Dotted quads are recognized as a valid parameter type for the HELO command. Superfluous <'s and >'s on addresses are detected (synchronously) and the command refused. -- Change notes for 2.0: "I threw away all the old bugs and created a whole new set" This implementation doesn't retain much code from the 1.4 release. The major changes are the router configuration language (1.5 years in development), improvements in the scheduler (1 week), and rationalization of transport agent code (2 days). There is a new system configuration mechanism (the hostenv directory) and associated changes in the code. -- Change notes for 1.4: The following differences will be apparent from the 1.3 release: - There are now three logical places for ZMailer files: POSTOFFICE spool MAILBIN binaries/programs MAILSHARE configurations/databases/text/zmailer This is in response to the distinction between the architecture-dependent and -independent files, being made in SunOS 4.0 and presumably future UCB, DEC, Sun, and ATT releases. - The $POSTOFFICE/forms directory has been moved to $MAILSHARE/forms. Remember to do this manually, using or merging in the contents of proto/forms. - The scheduler configuration file has been renamed "scheduler.cf" (it was "scheduler.cntl"). - The $POSTOFFICE/.{router,scheduler}.pid files are now .pid.{router,scheduler} and a .pid.smtpserver has been added. - There are manual pages for the zmailer script and the mailq program. The manual pages are not installed automatically, you may want to do it yourself.