0.27 

  Use $ENV{QMAIL} to override /var/qmail for where to find the
  control/ directory.

  Enable "check_earlytalker" in the default plugins config

  [.. todo, fill in older changes ..] spf changes etc?

0.26 - 2003/06/11

  Add queue/smtp-forward plugin (Matt Sergeant)

  Add documentation to Qpsmtpd::Transaction (Matt Sergeant)

  Fix bug in dnsbl that made it sometimes ignore "hits" (thanks to
  James H. Thompson <jht@lava.net>)

  Fix bug hiding the error message when an existing configuration file
  isn't readable.

  If a plugin running the ehlo hook add something to the ARRAY
  reference $self->transaction->notes('capabilities') then it will be
  added to the EHLO response.

  Add command_counter method to the SMTP object.  Plugins can use this
  to catch (or not) consecutive commands.  In particular useful with
  the unrecognized_command hook.

  Filter out all uncommon characters from the remote_host
  setting. (thanks to Frank Denis / Jedi/Sector One for the hint).

  Added a check for the spool_dir having mode 0700.

  Don't break under taint mode on OpenBSD. (thanks to Frank Denis /
  Jedi/Sector One)

  Have the qmail-queue plugin add the message-id to the "Queued!"
  message we send back to the client (to help those odd sendmail using
  people debug their logs)

  Set the process name to "qpsmtpd [1.2.3.4 : host.name.tld]"

  Fixed timeout bug when the client sent DATA and then stopped before
  sending the next line. (Gergely Risko <risko@risko.hu>) 

  unrecognized_command hook and a count_unrecognized_commands
  plugin. (Rasjid Wilcox)

  check_earlytalker plugin.  Deny the connection if the client talks
  before we show our SMTP banner.  (From Devin Carraway)

  Patch Qpsmtpd::SMTP to allow connect plugins to give DENY and
  DENYSOFT return codes.  Based on patch from Devin Carraway.

  Support morercpthosts.cdb

  config now takes an extra "type" parameter.  If it's "map" then a
  reference to a tied hash will be returned.


0.25 - 2003/03/18

  Use the proper RFC2822 date format in the Received headers. (Somehow
  I had convinced myself that ISO8601 dates were okay). Thanks to
  Kee Hinckley <nazgul@somewhere.com>.

  Print the date in the local timezone instead of in -0000. (Not
  entirely convinced this is a good idea)

  Lots of changes from Rasjid Wilcox <rasjidw@openminddev.net>:

  Fix error handling in queue/qmail-queue. (Rasjid)
 
  Add option to queue/qmail-queue to specify an alternate qmail-queue
  location. (Rasjid)

  Add support for the QMAILQUEUE environment variable. (Rasjid)

  PPerl compatibility (yay!)  (Rasjid)

  Allow mail to <abuse> and <postmaster> to go through. (Rasjid)

  Add "deny" hook that gets called when another hook returns DENY or
  DENYSOFT. (Rasjid)

  Add list of required modules to the README. Thanks to Skaag Argonius
  <skaag@skaag.net>.

  Fix dnsbl plugin to give us all the results. (Patch from Matt
  Sergeant <matt@sergeant.org>)

  Disable identd lookups by passing -R to tcpserver. (Thanks to Matt)

  add plugin hooks for HELO and EHLO (Devin Carraway
  <qpsmtpd-list@devin.com>)

  check_spamhelo plugin to deny mail from claimed senders from the
  list specified in F<badhelo>.  (For example aol.com or yahoo.com) 
  (Devin Carraway)


0.20 - 2002/12/09

  Fix the "too many dots in the beginning of the line" bug.

  Add munge_subject_threshold and reject_threshold options to the
  spamassassin plugin.  Add documentation to the spamassassin plugin.

  Add -p to mkdir in log/run (Rasjid Wilcox <rasjidw@openminddev.net>)

  clamav plugin, thanks to Matt Sergeant, matt@sergeant.org.
  Enabling this might require you to increase your "softlimit" in
  the run file.  http://www.clamav.org/

  Make the spamassassin plugin not stop the next content plugins from
  running.

  Store hooks runtime config globally so they will work within the
  transaction objects too.

  content_log plugin - log the content of all mails for
  debugging. Robert Spier <robert@perl.org>.

  http_config plugin - get configuration via http

  plugins can take arguments via their line in the "plugins" file

  make the quit_fortune plugin check that the fortune program exists


0.12 - 2002/10/17

  Better error messages when a plugin fails
  
  Remove some debug messages in the log 

  Fix NOOP command with perl 5.6.

  Better installation instructions and error message when no plugin
  allowed or denied relaying (thanks to Lars Rander
  <lrNOSPAM@rander.dk>).
 
  Use /usr/bin/perl instead of the non-standard /home/perl/bin/perl


0.11 - 2002/10/09

  Make a "queue" plugin hook and move the qmail-queue functionality
  to plugins/queue/qmail-queue.  This allows you to make qpsmtpd 
  delivery mail via smtp or lmtp or into a database or whatever you want.

  Reorganize most of Qpsmtpd.pm into Qpsmtpd/SMTP.pm.

  Add spool_dir option (thanks to Ross Mueller <ross@visual.com>)

  Add plugin name to the "hooks" data structure, so we can log plugin
  module had an error when we run a hook.

  Make klez filter run for mails bigger than 220KB; they are sometimes
  bigger than that.

  Avoid "use of uninitialized variable" warning when the "MAIL" or the
  "RCPT" command is executed without a parameter.

  Compatibility with perl 5.5.3.

  Fix "Could not print" error message in the TcpServer object. (Thanks
  to Ross Mueller <ross@visual.com>)

  dnsbl plugin queues lookups in the background upon connect but
  doesn't block for the results until they are needed, greatly
  speeding up connection times.  Also fix a typo in the dnsbl plugin
  so it'll actually work(!).

  check_badmailfrom and check_badrcptto plugins (Jim Winstead
  <jimw@trainedmonkey.com>)

  Better RFC conformance. (Reset transactions after the DATA command and
  when the MAIL command is being done)


0.10 - 2002/09/08

  New object oriented internals
  
  Very flexible plugin

  All functionality not core to SMTP moved to plugins

  Can accept mails as large as your file system will allow (instead of
  up to as much memory you would allow qpsmtpd to eat).

2002/09/08
  Add klez_filter plugin

  Support more return codes for data_post

  Document data_post

  Add plugin name to the log entries when plugins use log()

  Add plugin_name method to the default plugin object.

  Improve error handling in the spamassassin plugin


2002/08/06
  Spool message bodies to a tmp file so we can support HUGE messages
 
  API to read the message body (undocumented, subject to change)

  data_post hook (undocumented)

  SpamAssassin plugin (connects to spamd on localhost), see
  plugins/spamassassin


2002/07/15
  DNS RBL and RHSBL support via plugins.

  More hooks.

2002/07/03
  First (non functional) version of the new object oriented mail engine (0.10).
 

Changes on the old v0.0x branch:

2002/05/09
  Klez filter (thanks to Robert Spier)

2002/04/20
  Bumped version number to 0.07

  Support comments in configuration files (prefix the line with #)
  
  Support RELAYCLIENT like qmail-smtpd (thanks to Marius Kjeldahl
  <marius@kjeldahl.net> and Zukka Zitting <jukka.zitting@iki.fi>)

  If the connection fails while in DATA we would just accept the
  message. Ouch! Thanks to Devin Carraway <qpsmtpd@devin.com> for the
  patch.


2002/01/26
  Allow [1.2.3.4] for the hostname when checking if the dns resolves


2002/01/21
  assorted fixes; getting dnsbl's to actually work

  fixing the maximum message size (databytes) stuff (thanks for the
  spot to Andrew Pam <xanni@glasswings.com.au>)

  support and enable taint checking (thanks to Devin Carraway
  <qpsmtpd@devin.com>)

  Make the MAIL FROM host dns check configurable. (thanks to Devin
  Carraway).

  Add more documentation to the README file.