Version 4.25.0
1 February 2012
    -add support for storing POP/IMAP password in OSX keychain.  Thanks: Adam 
    Lazur.

Version 4.24.0
11 December 2011
    -add an explicit expunge when closing an IMAP mailbox, for servers that 
    incorrectly do not do this when the mailbox is closed.  Thanks: Nicolas 
    Pomarède.
    -fix incorrect section reference for `mailboxes` parameter in documentation.
    Thanks: Ross Boylan.
    -fix getmail_fetch broken in 4.21.0.  Thanks: Chris Donoghue.

Version 4.23.0
20 November 2011

    -fix race if new message shows up in POP3 mailbox between running the UIDL 
    and LIST commands.  Thanks: Roland Koebler, Osamu Aoki.

Version 4.22.2
12 November 2011

  -fix an error when logging a bad response to an IMAP SELECT command, 
  introduced in 4.21.0.  Thanks: "kureshii".

Version 4.22.1
30 September 2011

  -fix BrokenUIDLPOP3Retriever breakage from 4.21.0.  Thanks: Scott Robbins, 
  "hgolden".
  
Version 4.22.0
25 September 2011

  -when retriever supports multiple mail folders (IMAP), store oldmail data for
  each folder separately, preventing problems in some cases when using multiple
  rc files with the same account.  Thanks: Jesse Schobben.

Version 4.21.0
23 September 2011

  -automatically open IMAP folders read-only if neither the delete nor 
  delete_after options are in use; necessary to access chatlogs via Gmail.
  Thanks: Daniel M. Drucker.
  -avoid sorting msgids on each retrieval, reducing overhead when dealing with
  folders containing thousands of messages.  Thanks: Daniel Koukola.

Version 4.20.4
16 July 2011
  -include more info from server response in error message when IMAP command
  errors out.  Thanks: W. Martin Borgert, Osamu Aoki.
  -switch to using Parser instead of HeaderParser to correct illegal formatting
  bogosities in the body parts of incoming messages.  Thanks: Lauri Alanko.

Version 4.20.3
30 May 2011
  -fix logging errors in error paths.  Thanks: Visa Putkinen.

Version 4.20.2
9 Apr 2011
  -further changes to the Received: header construction to handle IPv6 better.
  Thanks: Frédéric Perrin.

Version 4.20.1
7 Apr 2011
  -ensure correct remote address and port is included in the Received: trace
  headers generated by getmail.  Previously the first address found for the 
  server was used even if another address was actually used to connect to the
  server.  Thanks: Frédéric Perrin.
  -add workaround for Python issue http://bugs.python.org/issue1389051 which
  affects Python < 2.5.3, causing message retrieval of large messages from IMAP4
  SSL servers to consume pathologically large amounts of memory.  
  Thanks: Bill Janssen.

Version 4.20.0
29 June 2010
  -fix crap code from bad svn merge that slipped into 4.18.0, triggering 
  exceptions in MDA_external configs.  Thanks: Paul Howarth.

Version 4.19.0
29 June 2010
  -fix missing import introduced in 4.18.0.  Thanks: Paul Howarth.

Version 4.18.0
26 June 2010
  -update broken link in FAQ.  Thanks: Stefan Kangas.
  -strip a few extra problematic (on non-Unix systems) characters when 
  generating oldmail filenames; backslash was requested by Andy Ross.
  If upgrading and your current oldmail file contains any of these
  characters: 
      \ ; < > | 
  ... then rename it, replacing runs of one or more of those characters with
  a single "-".
  -improve clarity of message logged by getmail when an external program exits
  0 but getmail considers it failed because it wrote to stderr.  Thanks:
  Chris Dennis.

Version 4.17.0
30 April 2010
  -change to how getmail counts messages in an IMAP mailbox; prevents problems
  where getmail would only see the first 500 messages in a mailbox with some
  IMAP servers that return oddball responses to SELECT.  Thanks: David Damerell.

Version 4.16.0
5 January 2010
  -additional fix for IMAP server that offers a message it then fails to return,
  to allow getmail to continue with the next message.  Thanks: Yaw Anokwa.

Version 4.15.0
2 December 2009
  -default port for MultidropIMAPSSLRetriever was incorrect.  Thanks: David 
  Lehn.

Version 4.14.0
23 November 2009
  -handle additional cases where IMAP (and for good measure, POP3) server is
  broken and offers a message that it then fails to return.  Thanks: Eric 
  Waguespack.

Version 4.13.0
13 October 2009
  -fix new log message not having trailing newline.Thanks: Morty Abzug.

Version 4.12.0
7 October 2009
  -handle MSExchange failure to deliver message gracefully.  Thanks: Morty 
  Abzug.
  -documentation updates regarding Python IMAP memory bug.  Thanks: "spig".
  -fix bad tag in documentation.

Version 4.11.0
8 August 2009
  -fix --dump not generating any output for rcfiles containing "verbose = 0"
  option.  Thanks: Morty Abzug.
  -fix copy-and-paste error in documentation of MultiSorter destination.
  Thanks: Roland Hill.

Version 4.10.0
6 August 2009
  -add "message_log_verbose" option, defaulting to false.  If true, the
  message_log file (and syslog, if used) will contain a little more information
  than the default of just messages retrieved.  Thanks: Matthias Andree,
  Gregory Morozov.

Version 4.9.2
15 July 2009
  -use tempfile module function instead of os.tmpfile() so getmail obeys TMPDIR
  and similar environment variables.  Thanks: Stefan Bähring.
  -fix encoding of CHANGELOG to utf-8.

Version 4.9.1
1 June 2009

  -if oldmail file is corrupted on disk (by system crash, perhaps), handle it
  gracefully.  Some lines may be lost (and messages therefore re-retrieved),
  but operation will continue, with the corrupt lines logged.  Thanks:  Domen
  Puncer.

Version 4.9.0
5 April 2009

  -add Kerberos authentication support to IMAP retriever classes.  Thanks:
  Guido Günther, Uli M.
  -clarify documentation regarding MDA_external.  Thanks: AJ Weber.
  -eliminate deprecation warning for sets module with Python 2.6 by using a
  compatibility wrapper module.

Version 4.8.4
26 September 2008

  -Add missing fsync() in updatefile close method to ensure data actually
  hits disk before the rename takes place, to make writing of the oldmail
  file more resilient to system crashes.  Thanks: Domen Puncer.

Version 4.8.3
11 August 2008

  -Improve information sent to logfile about messages not retrieved.
  Thanks: Scott.

Version 4.8.2
2 August 2008

  -for IMAP retrievers, keep message state around for 30 days even if the
  corresponding message isn't seen.  This allows users to have multiple rc
  files with different IMAP folders to retrieve from without losing their
  "seen" mail state for the folders they're not currently retrieving from.
  You no longer need to work around this with different getmail state
  directories.  Thanks: ?.

Version 4.8.1
26 March 2008

  -fix use of Python 2.4 set builtin in 4.8.0 preventing getmail from running
  on Python 2.3.x.  Thanks: Björn Stenberg.
  -fix the RPM spec file not being included in the getmail distribution.

Version 4.8.0
19 February 2008
  -better diagnostic when user invalidly supplies timeout configuration
  parametmer for an IMAP-SSL retriever.  Thanks: Dennis S.
  -code cleanups

Version 4.7.8
5 February 2008

  -explicitly close current IMAP mailbox when selecting a new one, so all
  servers expunge deleted mail.  Thanks: Josh Triplett.
  -include experimental spec file for creating RPM with rpmbuild.  Thanks:
  Dag Wieers, Rob Loos, Dries Verachtert.

Version 4.7.7
8 November 2007

  -convert changelog to utf-8 encoding.
  -update email addresses, etc.  Domain for mailing lists has changed to
  lists.pyropus.ca.
  -add FAQ about memory errors on OS X.  Thanks: Andres Gasson.
  -drop log message level for stderr output of destination if ignore_stderr is
  set, just like for filter.  Thanks: Jeremy Chadwick.

Version 4.7.6
8 August 2007

  -fix exception when getmail is trying to report a POP3 server that
  completely missed generating a UIDL token for a message.
  Thanks: Hans Lammerts.

Version 4.7.5
6 June 2007

  -make updatefile honour symlinks, so users can alias one server's oldmail
  state file to another (for split-horizon DNS and other strange
  configurations).  Thanks: Scott Hepler.

Version 4.7.4
24 April 2007

  -explicitly watch for broken POP3 servers that return a blank UIDL value
  (not permitted by the POP3 protocol) and print a fatal error message.
  Thanks: Florian Hackenberger and Cameron Rangeley.

Version 4.7.3
18 March 2007

  -fix wrong bytecount displayed in summary at end of run.  Thanks: Andreas
  Jung.

Version 4.7.2
20 February 2007

  -add ignore_stderr option to filters, copying same from MDA_external
  destination.  Thanks: Vittorio Beggi.

Version 4.7.1
2 February 2007

  -add max_bytes_per_session option.  Thanks: Robert Spencer.
  -documentation additions.

Version 4.7.0
24 January 2007

  -make Mboxrd lock type configurable (lockf or flock). Change default
  to lockf.  Thanks: Norman Carver.

Version 4.6.7
3 January 2007

  -better handling for some fatal violations of POP/IMAP protocols.
  Thanks: Paul ?.
  -formatting cleanups.

Version 4.6.6
12 December 2006

  -add ignore_stderr option to MDA_external destination.  Thanks: Daniel
  Burrows.
  -documentation cleanups.

Version 4.6.5
20 October 2006

  -disable debug logging message which would show up in messages if --trace was
  used and the message was passed through an external filter.  Thanks:
  Christian Bruemmer.
  -add additional sanity checks to ensure a recent-enough Python is used;
  trying to run getmail 4 with Python 2.2 would throw an exception.
  Thanks: fakhri ?.

Version 4.6.4
28 September 2006

  -add FAQ about BrokenUIDLPOP3 retrievers.
  -add better diagnostics for missing/invalid/unwritable state/data
  directory.  Thanks: Christian Authmann.

Version 4.6.3
22 June 2006

  -fix regression: spurious errors thrown when required multidrop retriever
  parameter "envelope_recipient" not present in getmailrc file.
  Thanks: Elliot Schlegelmilch.
  -fix regression: getmail_fetch no longer properly supported external MDAs
  because of problems parsing the arguments to them.  Thanks: ?.
  -change getmail's handling of regular expressions in the "locals" parameter
  of MultiSorter destination to allow it to handle backslashes correctly.
  Unfortunately this means complicating the configuration syntax slightly.
  Thanks: Tim van der Molen.
  -update filters to use new configuration code.  Remove obsolete code.

Version 4.6.2
8 June 2006

  -fix regression introduced in 4.6.0 where atime on mbox files would get
  updated (i.e. not set back), making it difficult for other programs to
  tell if there was new mail or not without actually opening the mbox.
  Thanks: Tim van der Molen.

Version 4.6.1
31 May 2006

  -fix attribute deletion error with Filter_classifier when strip_delivered_to
  is set.  Thanks: Darren Stevens.
  -do not consider qmail-local writing to stderr a delivery error.
  Thanks: Darren Stevens.

Version 4.6.0
5 April 2006

  -clean up logger API.
  -refactor configuration mechanism to use classes with embedded logic,
  rather than simply dictionaries.

Version 4.5.4
14 February 2006

  -added Maildir "filemode" parameter.  Thanks:  Martin Haag.

Version 4.5.3
8 February 2006

  -keyfile and certfile parameters to SSL retrievers are now expanded for
  leading "~/" and "~username/" as well as environment variables, just like
  other path parameters.  Thanks:  Fredrik Steen.

Version 4.5.2
7 February 2006

  -fix IMAP bug where no mail was retrieved introduced in 4.5.0.  Thanks:
  Scott Robbins.

Version 4.5.1
3 February 2006

  -fix accidental use of sorted() builtin only present in Python 2.4 and up.
  Thanks:  Jürgen Nagel.

Version 4.5.0
1 February 2006

  -add delete_dup_msgids option to non-multidrop POP3 retrievers.
  Thanks: Matthias Andree.
  -suppress stack trace in getmail_fetch error message when configuration error
  detected.  Thanks: Dave Jarvis.
  -documentation updates.
  -build and development environment changes.  The plaintext versions of the
  documentation are now generated with links instead of lynx.
  -explicitly log the reason for not retrieving a message (seen or oversized).
  Thanks: Payal Rathod.

Version 4.4.4
3 January 2006

  -improve parsing of flags in IMAP responses.  Thanks: Gareth McCaughan.

Version 4.4.3
1 December 2005

  -fix harmless copy and paste error in IMAPRetrieverBase class.  Thanks: Henry
  Miller.

Version 4.4.2
13 November 2005

  -fix logging import in corrupt messages with Python 2.3.  Thanks: Marco Ferra.

Version 4.4.1
10 November 2005

  -work around bug in Python which meant POP3-over-SSL with Python >= 2.4
  could "hang" (it's exactly the same bug that affected getmail's initial
  IMAP-over-SSL code).

Version 4.4.0
9 November 2005

  -add new POP3-over-SSL initialization class, which is automatically used
  when Python 2.4 or newer is in use.  This reduces the overhead involved
  in retrieving messages from a POP3SSL server (reduces systime about 35%,
  user time about 50%, wall time 10-30%).  Thanks: Jan Vereecke.
  -add getmail_fetch configuration-less commandline POP retriever, perfect
  for scripting use.  Development of getmail_fetch was sponsored by
  Texas Communications.
  -future proofing: eliminate relative imports within getmailcore package.

Version 4.3.14
2 November 2005

  -Fix copy and paste error that caused BrokenUIDLPOP3SSLRetriever to default
  to port 110.  Thanks: Daniel Burrows via Fredrik Steen.

Version 4.3.13
15 October 2005

  -add BrokenUIDLPOP3SSLRetriever as SSL version of BrokenUIDLPOP3Retriever,
  based on an idea by a user of the Debian package.  Thanks: Daniel Burrows,
  Fredrik Steen.

Version 4.3.12
13 October 2005

  -remove deprecated "strict" argument from message/header parsing calls.
  While it was possible to suppress the warning that resulted when using
  Python 2.4,  it appears many getmail users couldn't bother to do that
  and complained to me instead.

Version 4.3.11
16 June 2005

  -getmail could previously record an envelope return path header of "<<>>".
  Fixed.  Thanks: Fredrik Steen.

Version 4.3.10
19 May 2005

  -bugfix for missing import.  Thanks: Matthias Andree.

Version 4.3.9
18 May 2005

  -for multidrop retrievers, change the way the envelope recipient header
  field is parsed, to prevent odd values from being interpreted as multiple
  addresses when they look like an 822-style address group.  Thanks: "aal".
  -try to avoid parsing message bodies, in case they're corrupt or invalid.
  Thanks: Michael Gold.

Version 4.3.8
6 May 2005

  -change (again) handling of deleted messages vs. connection that dies.
  Inability to send QUIT to POP3 server should be less problematic now.
  -improve housekeeping of old message state file.  Thanks: Thomas Schwinge.

Version 4.3.7
1 May 2005

  -add error message for missing mboxrd file.  Thanks: Marco Ferra.
  -change handling of connection that dies vs. deleted messages.
  Thanks: Thomas Schwinge.

Version 4.3.6
8 April 2005

  -broke BrokenUIDLPOP3Retriever when I added the forget_deleted parameter
  to the retrievers base class; now fixed.  Thanks: Georg Neis.

Version 4.3.5
3 April 2005

  -make getmail less conservative about remembering messages as already-seen
  when unrelated errors occur after successfully delivering them.
  Thanks: Thomas Schwinge.

Version 4.3.4
14 March 2005

  -documentation changes; getmail v4 cannot run natively on Windows.  Use
  Cygwin if you must run on a Windows platform; this works.
  -remove some Windows-specific code.

Version 4.3.3
19 February 2005

  -previously, for safety, getmail would re-retrieve messages after a session
  that encountered errors.  However, getmail had enough information to safely
  remember those messages that had been successfully delivered.  This behaviour
  has been changed, to avoid delivering duplicate messages where it isn't
  necessary.  Thanks: Thomas Schwinge.
  -in output/log files, getmailrc files are now specified only by filename,
  instead of by complete paths.  This will prevent some overly-long output
  lines.
  -add Windows versions of functions to lock/unlock files, so mbox delivery
  can be used on Windows.  Thanks: Felix Schwarz.

Version 4.3.2
5 February 2005

  -previously, if an SSL POP3 or IMAP server abruptly closed the connection
  before getmail could finish logging in, getmail would exit instead of
  proceeding to the next configured mail account.  Fixed.  Thanks: Matthias
  Andree, Frank Benkstein, Thomas Schwinge.
  -eliminate duplicate Return-Path: header fields.  Thanks: Angles Puglisi.

Version 4.3.1
18 January 2005

  -some IMAP errors would cause getmail to raise an exception, instead of
  gracefully proceeding with the next configured mail account.  Fixed.
  Thanks: Matthias Andree.

Version 4.3.0
10 January 2005

  -add BrokenUIDLPOP3Retriever class to support servers that do not implement
  the UIDL command, or which fail to uniquely identify messages using it.

Version 4.2.6
2 January 2005

  -add new error message and documentation for POP3 servers that cannot
  uniquely identify messages in a mailbox.  Thanks: Thomas Schwinge.

Version 4.2.5
8 December 2004

  -fix typo in getmailcore/exceptions.py that would raise a NameError
  exception in certain rare cases.  Thanks: Gour ?.

Version 4.2.4
22 November 2004

  -one type of filter error would cause getmail to skip to the next configured
  mail account, rather than simply proceeding to the next message from the
  same account.  Fixed.  Thanks: Adrien Beau.
  -documentation updates.

Version 4.2.3
18 November 2004

  -documentation updates.
  -getmailrc examples file updated.  Thanks: Scott Robbins.
  -clarify error message when user insecurely tries to deliver mail as GID 0.

Version 4.2.2
11 October 2004

  -in child delivery processes, change real as well as effective uid/gid.
  Thanks: David Watson.
  -handle corrupted oldmail file better.  Thanks: Matthias Andree.

Version 4.2.1
8 October 2004

  -set message attributes on corrupt container objects to prevent problems
  with destinations that expect multidrop-retrieved messages.
  Thanks: Harry Wearne.
  -move tests for existence of file from mbox destination initialization
  to delivery method, and change error from configuration to delivery error.
  Thanks: David Watson.

Version 4.2.0
18 September 2004

  -SECURITY: previous versions of getmail contain a security vulnerability.
  A local attacker with a shell account could exploit a race condition (or a
  similar symlink attack) to cause getmail to create or overwrite files in a
  directory of the local user's choosing if the system administrator ran getmail
  as root and delivered messages to a maildir or mbox file under the control of
  the attacker, resulting in a local root exploit.  Fixed in versions 4.2.0
  and 3.2.5.
  This vulnerability is not exploitable if the administrator does not deliver
  mail to the maildirs/mbox files of untrusted local users, or if getmail is
  configured to use an external unprivileged MDA.  This vulnerability is
  not remotely exploitable.
  Thanks: David Watson.  My gratitude to David for his work on finding and
  analyzing this problem.
  -Now, on Unix-like systems when run as root, getmail forks a child
  process and drops privileges before delivering to maildirs or mbox files.
  getmail will absolutely refuse to deliver to such destinations as root;
  the uid to switch to must be configured in the getmailrc file.
  -revert behaviour regarding delivery to non-existent mbox files.  Versions
  4.0.0 through 4.1.5 would create the mbox file if it did not exist; in
  versions 4.2.0 and up, getmail reverts to the v.3 behaviour of refusing
  to do so.

Version 4.1.5
13 September 2004

  -getmail would not delete messages from the server if it was configured not
  to retrieve them and the delete_after directive was not in use (i.e. user
  normally left messages on server but occasionally wanted to force-delete
  them).  Fixed.  Thanks:  Frankye Fattarelli.

Version 4.1.4
1 September 2004

  -change failure of a message filter to produce at least as many mail headers
  as it was provided from a non-fatal error to warning.  If your filter strips
  headers, getmail will now warn you about it, but will not consider it an
  error.
  -documentation additions.

Version 4.1.3
31 August 2004

  -enhance warning diagnostics about non-accessible or non-writable maildirs.
  -change method of determining name of local host; only fall back to
  getfqdn() if the result of gethostname() does not contain a dot.
  -documentation enhancements.

Version 4.1.2
28 August 2004

  -dumping config would raise an exception since 4.1.0; fixed.
  Thanks: Ilya Krel.

Version 4.1.1
27 August 2004

  -getmail raised an exception after processing all accounts, while printing
  a summary, if verbose was set to 2.  Fixed.  Thanks:  Matthias Andree.

Version 4.1.0
24 August 2004

  -biggest change is multiple verbosity levels.  To support this from rc file,
  the verbose parameter had to change from a boolean to an integer.  Update
  your getmail rc files:  for quiet, set verbose to 0.  For more output,
  set it to 1 or 2.  2 includes info about messages not retrieved, etc.
  -add rc filename to error messages
  -change fix from 4.0.11 for email module raising exception during .flatten().
  Thanks:  Jürgen Nagel.
  -some types of SSL error could cause getmail to exit instead of
  continuing to the next mail account; fixed.  Thanks:  Matthias Andree.

Version 4.0.13
19 August 2004

  -unrecognized parameters could trigger a traceback instead of a warning.
  Fixed.  Thanks: Frankye Fattarelli.

Version 4.0.12
19 August 2004

  -forgot to add the new Message attribute (from 4.0.11) to its slots
  declaration.  Fixed.

Version 4.0.11
18 August 2004

  -change oldmail file writing to save a few bytes of disk space
  -documentation additions.
  -Python's standard library email.Message().flatten() could barf on certain
  types of badly mis-formatted messages (instead of the during instantiation,
  like the /other/ buggy cases).  Hope this is fixed in Python 2.4.  Developed
  a work-around for getmail.  Thanks:  Jürgen Nagel.
  -changes to "normal" output of getmail to make it slightly less verbose.

Version 4.0.10
12 August 2004

  -cosmetic fix to output:  add whitespace after timestamp when not retrieving
  message.  Thanks: Matthias Andree.
  -include MANIFEST.in in source distribution, to assist users in building
  "built distributions" from it.
  -change a few output messages' level to make verbose mode slightly less
  verbose, and add --debug switch to get "more verbose" behaviour.

Version 4.0.9
9 August 2004

  -fix cosmetic error for IMAP mailboxes with 0 messages in them.
  -change method of obtaining uidvalidity from IMAP server and remove wrapper.
  -previously, connecting to an IMAP-SSL server could fail if a non-SSL
  IMAP connection were attempted immediately before.  This was due to
  the Python bug discussed here:
  http://sourceforge.net/tracker/index.php?func=detail&aid=945642&group_id=5470&atid=305470
  Implemented a workaround for getmail.  Thanks: Payal Rathod.

Version 4.0.8
6 August 2004

  -add an extra error message if you ask getmail to deliver to a maildir,
  but getmail can't check the contents of it due to permissions.
  Thanks: Clemens Buschmann.
  -fix breakage introduced in 4.0.7: getmail would forget a message was "seen"
  after a cycle of not retrieving it.  Thanks: Payal Rathod.

Version 4.0.7
5 August 2004

  -change failure of a message filter to produce at least as many mail headers
  as it was provided from a fatal to a non-fatal error.  The message will
  be skipped.  Thanks: Payal Rathod.
  -a few non-conformant IMAP4 servers don't implement SEARCH, so getmail
  couldn't get a list of UIDs.  Changed to use FETCH instead.
  Thanks: Matthias Andree.
  -prevent traceback if IMAP SSL connection closed during connect().
  Thanks: Payal Rathod.
  -add warning if unknown parameters are supplied to a retriever, filter,
  or destination.
  -write subclasses of Python imaplib classes to work around missing
  UIDVALIDITY select() response.  Add it to the state getmail keeps.
  Thanks:  Matthias Andree.
  -move message state saving to later, so getmail doesn't falsely remember
  having handled a message.  Thanks:  Matthias Andree.
  -change location of documentation/man pages to
  <prefix>/share/{doc/getmail,man}/ to be more comformant with the FHS.
  -documentation updates


Version 4.0.6
4 August 2004

  -if the connection failed in a certain way, getmail could forget which
  messages it had already retrieved, and therefore retrieve them again when
  the next successful connection occurred.  Fixed.  Thanks: Wim Uyttebroek.
  -add win32 executable installer as third download option.

Version 4.0.5
3 August 2004

  -add additional error handler for certain network errors with POP3-over-SSL
  connections.  Thanks: Frank Benkstein.
  -rename retriever class for Demon UK:  it should have been SDPS; my
  transposition.  Thanks: Paul Howarth.

Version 4.0.4
2 August 2004

  -corrupt-message handler introduced in 4.0.1 needed tweaking.
  Thanks: Bernhard Riedel.

Version 4.0.3
2 August 2004

  -some types of socket errors would raise an exception instead of letting
  getmail gracefully continue; fixed.  Thanks: David.
  -documentatation updates; fix two typos and add to the section on using
  ClamAV with getmail.
  -changes to my release process; the current version's URL will not change
  when a new version is released.  See, I try to help others, even when they
  don't do the same...

Version 4.0.2
30 July 2004

  -trying to use MDA_qmaillocal destination with a non-multidrop retriever
  would raise an exception instead of printing a configuration error message.
  Fixed.  Thanks: Clemens Buschmann.

Version 4.0.1
26 July 2004

  -documentation fixes.  Thanks: Roland Hill.
  -add handler for badly-misformatted messages as a workaround for
  Python 2.3.x, where the email module can raise exceptions while parsing
  messages.  Thanks: Paul.

Version 4.0.0
23 July 2004

  -exit beta; final release of version 4.0.0, with approximately four thousand
  lines (~150 kbytes) of Python code and five thousand lines (~180 kbytes) of
  documentation.

Version 4.0.0b10
21 July 2004

  -documentation updates and cleanups
  -add MultiGuesser destination; it's like MultiSorter, but guesses at the
  message recipient based on addresses found in the message header, to be
  used for mail sorting if you don't have a proper domain/multidrop mailbox.
  -consolidate initialization code from retrievers to RetrieverSkeleton base
  class.
  -slight change to main script and retriever base classes to change the
  way the retriever objects are destroyed and garbage-collected
  -get rid of unneeded hostname variable in MultiDestinationBase
  -add "Summary:" header line to main script output in verbose mode
  -wrap code for 80 columns
  -fix error message when a filter doesn't return a message properly.
  Thanks: Shantanu Kulkarni.

Version 4.0.0b9
19 July 2004

  -change syntax of MultiSorter's locals parameter.  The previous syntax was
  fragile and was mostly a holdover from previous versions; it is now a tuple of
  items, each of which is a 2-tuple of quoted strings.
  -add Python version to --dump output.
  -eliminate redundant _confstring() method in _retrieverbases.py.
  -small documentation updates.

Version 4.0.0b8
18 July 2004

  -documentation updates.
  -include RPM build.  Rapidly approaching release state.

Version 4.0.0b7
17 July 2004

  -changes to an "impossible" error handler in _child_handler(), just in case.
  -move some code from destinations.MultiSorter() into new MultiDestinationBase
  base class.
  -fix MultiDestinationBase._get_destination()
  -add MultiDestination class to deliver messages to multiple destinations
  unconditionally.
  -cosmetic fixes to output

Version 4.0.0b6
15 July 2004

  -move common child-handling code out of filters and destinations into new
  baseclasses.ForkingBase() class.
  -add __all__ declarations to modules that were missing them, to help prevent
  namespace clutter for others

Version 4.0.0b5
15 July 2004

  -apply the child fix from b3 to Filter_classifier; I missed this in the
  update.  Thanks: Dave Osbourn.
  -cosmetic fix for output describing filters and destination objects.
  Thanks: Dave Osbourn.
  -catch configuration error of non-multidrop retriever with multidrop-only
  destination.  This broke when I cleaned up the message attribute interface
  in alpha 29.  Thanks: Dominik Kacprzak.

Version 4.0.0b4
14 July 2004

  -remove unneeded code raising a ConfigurationError in Filter_TMDA
  -clean up output for Maildir, Mboxrd destinations and getmail_maildir
  script, messages dropped by filters, various other bits
  -add --show-default-install-dirs to setup.py
  -documentation updates, including more clarification and examples of
  installation options
  -tweak to getmail manpage.  Thanks: Frankye Fattarelli.

Version 4.0.0b3
13 July 2004

  -different fix for the reaping child problem.  This one tested by Paul
  and confirmed working on Mandrake 10's kernel.
  -add Filter_TMDA filter class.
  -changes to setup.py to account for --install-data specifying a non-default
  path for the documentation and man pages

Version 4.0.0b2
13 July 2004

  -documentation fixes regarding installation.  Thanks: Emily Jackson.
  -do environment variable expansion in paths and arguments (before
  substitutions like %(sender), etc) in addition to expanding leading
  ~/ or ~user/ .  Thanks: Paul.
  -try change to code which reaps child processes; the previous code failed
  on a few Linux systems (perhaps the ones where the kernel changed
  fork() behaviour to run the child first?)  Reported by Paul.

Version 4.0.0b1
10 July 2004

  -first beta release
  -add missing os import to getmail_maildir
  -fix received_by in getmail_mbox and don't create Received: header
  -a handful of trivial changes to make the code idiomatically consistent
  -fix to oldmail file writing
  -documentation updates

Version 4.0.0a30
8 July 2004

  -documentation updates
  -change header-adding code from filters to a method in Message class.  Thanks:
  Frankye Fattarelli.
  -make MultiSorter pass retriever info down to its sub-destinations.  This
  fixes a problem reported by Frankye Fattarelli.

Version 4.0.0a29
8 July 2004

  -flesh out the getmailrc-examples file (note that it's been renamed from
  getmailrc-example)
  -clean up message attributes.  Make Message() class.  Move flatten_msg()
  out of utilities and make it into a Message method.  Remove header-length
  checking when generating flattened representation of message.  Change
  callers to use the new class.
  -move SENDER check from deliver_maildir() to getmail_maildir where it
  belongs.
  -update the miscellaneous documentation files
  -last alpha, I think

Version 4.0.0a28
7 July 2004

  -documentation additions and changes.
  -add manpages for getmail, getmail_maildir, getmail_box.  These go in
  PREFIX/man/man1/.

Version 4.0.0a27
4 July 2004

  -documentation fixes and additions.  Split documentation into
  reasonably-sized files.  I need to add inter- and intra-document links
  to most of the documentation yet.
  -add auto-generated tables of contents to each doc file.
  -start flushing out the website with copies of the docs, download directories,
  etc.

Version 4.0.0a26
4 July 2004

  -add explicit checks for multidrop classes to prevent users from incorrectly
  specifying certain header fields as recording the envelope recipient address
  -documentation fixes and additions

Version 4.0.0a25
2 July 2004

  -add handler for KeyboardInterrupt.  Thanks: Thomas Schwinge.
  -change setup script to not error if the specified directory prefix doesn't
  exist.  Thanks: Thomas Schwinge.
  -pass retriever protocol info to filters.  Thanks:  Frankye Fattarelli.
  -first inclusion of "real" documentation.  See docs/documentation.html or its
  plaintext counterpart docs/documentation.txt.

Version 4.0.0a24
1 July 2004

  -setup script/distutils changes.  The setup.py script now looks for
  --prefix or --home specifying an alternate installation directory, and
  otherwise defaults to the hierarchy that Python was installed to.
  /usr/share/doc/ or similar is no longer hardcoded anywhere.

Version 4.0.0a23
1 July 2004

  -changes to MDA_qmaillocal:  add "group" parameter, and make "user"
  parameter also have getmail change UID before invoking qmail-local.
  -change two instances of socket.gethostname() to socket.getfqdn()
  -change localparttranslate to localpart_translate
  -add explicit checks for socket.ssl(), which is optional.  Raise
  getmailConfigurationError if they're not present and the user tries
  to use it.  Thanks: Thomas Schwinge.
  -fix missing received_by in destinations.  Thanks: Frankye Fattarelli and
  Andrew Raines.

Version 4.0.0a22
30 June 2004

  -MultiSorter default destination can now be a named destination section as
  well, so postmaster mail can go to an external MDA, etc.
  -deliver_maildir writes out a new Return-Path: header field if SENDER
  is set.
  -include getmail_maildir and getmail_mbox delivery scripts for use as
  MDAs with other programs.
  -add starting/finishing log lines for each retriever
  -change eval_bool to raise exception on unexpected values, rather than
  using Python's native idea of what is boolean True and False
  -ensure no message has partial final line regardless of delivery method.
  Thanks: Thomas Schwinge.
  -get rid of msg_lines(), mbox_timestamp() and their only callers.
  -add the Delivered-To: and Received: header creation like getmail v.3 had,
  and boolean options delivered_to and received to allow the user to disable
  them.  This necessitates adding some data attributes to retriever classes
  and additional code to destination classes and utilities.
  Thanks: Thomas Schwinge.
  -drop .py suffix on the name of the main getmail script
  -declare the three scripts to be scripts instead of modules (for distutils)
  -some fixups to the distutils setup script.  If files or directories
  are still installed with "wrong" permissions (like 0600/0700 instead of
  0644/0755), please let me know.
  -a few miscellaneous fixups
  -heading for beta, working on documentation ...

Version 4.0.0a21
27 June 2004

  -leave Return-Path header field alone for program deliveries.  Thanks:
  Andrew Raines.

Version 4.0.0a20
25 June 2004

  -fix typo in Filter_classifier
  -wrap additional exception check around executing subprocesses to ensure
  nonzero exit on error
  -finish MDA_qmaillocal address handling and add strip_delivered_to
  parameter.  Document MDA_qmaillocal.
  -change email module import in utilities.py.  Submit bug report to
  Python bug tracker.  Thanks: Frankye Fattarelli.

Version 4.0.0a19
24 June 2004

  -bring some docstrings, comments, and documentation up to date.
  -add Filter_classifier filter module, to support adding information
  to the message header from programs that don't provide the original message
  back on stdout (like clamscan/clamdscan, apparently).  Thanks: Frankye
  Fattarelli.
  -missed seek(0) in msg_flatten().  Add missing imports.
  Thanks: Andrew Raines.

Version 4.0.0a18
24 June 2004

  -add msg_flatten(), msg_lines() and use them exclusively to prevent
  .as_string() from changing header fields for spurious reasons.
  Thanks: Andrew Raines.
  -remove code doing From_-escaping in Mboxrd and let the email module do it.
  -fix copy & paste errors in change_uidgid().  Thanks: Andrew Raines.
  -catch timeouts

Version 4.0.0a17
23 June 2004

  -add exitcodes_keep and exitcodes_drop parameters to Filter_external.
  Thanks: Frankye Fattarelli.

Version 4.0.0a16
23 June 2004

  -add user and group, and allow_root_commands parameters to MDA_external
  destination and Filter_external filter classes.
  -make import pwd fail gracefully for Windows, etc.
  -add allow_root_commands parameter to MDA_external destination and
  Filter_external filter classes to force overriding of running external
  commands as root.
  -pass reference to configparser to retriever, destination, and filters
  -add MultiSorter destination of "[section]" which invokes another
  destination from the same getmail rc file.  Use this to deliver to programs
  by including an MDA_external destination in a section named [foo] in the
  rc file, then specify that section name in the MultiSorter in the locals
  part, i.e.
    [destination]
    type = MultiSorter
    postmaster = /path/to/maildir/
    locals = joe /path/to/maildir/
      sam /path/to/mbox/
      chris [myprogram]
    [myprogram]
    type = MDA_external
    path = /usr/local/bin/mymda
    arguments = ("--strip-attachments", "-f%(sender)", "--fast")
  Don't try to cause a loop using this to point to itself.  You have been
  warned.
  -MultiSorter is now a little stricter about destination names.  A maildir
  (after any tilde expansion, if applicable) must start with "." or "/" and
  end with "/".  An mboxrd (after any tilde expansion, if applicable) must
  start with "." or "/".  This means if you previous had something like:
    locals = sam@example.net subdir/maildir/
  You'll need to change it to:
    locals = sam@example.net ./subdir/maildir/
  Of course,
    locals = sam@example.net ~sam/maildir/
  is already okay if sam is a valid user and has a valid home directory.
  -add message_log_syslog

Version 4.0.0a15
22 June 2004

  -add summary "Retrieved X messages for ..." for each rc file at program
  close.  Thanks: Frankye Fattarelli.
  -add explicit delete of retriever after quit() to try to force writing
  oldmail file immediately instead of at garbage collection.  Python makes
  no guarantees about when garbage collection takes place, so this won't be
  perfect.  Thanks: Julian Gomez.
  -add message_log
  -add traceback formatting on exception
  -change --dump to include filters.  Change order of operations.

Version 4.0.0a14
22 June 2004

  -fix IMAP-over-SSL.  socket.ssl objects are apparently incompatible with
  socket timeouts, even in the IMAP_SSL class.
  -ensure --trace debugging output doesn't output passwords.
  Thanks: Julian Gomez.
  -IMAP classes would stop indexing mailboxes when they hit an empty one.
  Fixed.  Thanks: Julian Gomez.

Version 4.0.0a13
21 June 2004

  -add missing default for max_messages_per_session.  Thanks:  Frankye
  Fattarelli.

Version 4.0.0a12
21 June 2004

  -slight change to quit() to ensure old connections are closed
  and garbage-collected before trying to make new ones.  Thanks:  Frankye
  Fattarelli.
  -move default documentation directory to /usr/local/share/doc/ .
  -filters.py now checks that the filtered message is at least basically
  sane in that it has a header no shorter than the message it was supplied.
  Let me know if this causes problems.
  -add and document max_messages_per_session

Version 4.0.0a11
21 June 2004

  -add MultidropIMAPRetriever and MultidropIMAPSSLRetriever
  -add move_on_delete parameter to all IMAP retrievers.
  -add and document delete_after and max_message_size options
  -document read_all and delete options
  -rename pop3ssl.py
  -fix --quiet.  i.e., getmail should again operate truly silently if you
  want it to.
  -retrievers' quit() method wasn't getting called.  Fix.  Thanks: Frankye
  Fattarelli.

Version 4.0.0a10
19 June 2004

  -fix the retrieve-every-other-message bug when delete == True.
  -move base classes out of retrievers.py into _retrieverbases.py
  -fix exception when retrieving mail from an empty IMAP account

Version 4.0.0a9
19 June 2004

  -accidentally edited initialize() in the wrong class; it broke POP3.
  This update should fix it.

Version 4.0.0a8
18 June 2004

  -fix 6 instances of getmailConfirurationError typo in retrievers.py
  -finish basics of IMAP support -- i.e., it successfully retrieves mail.
  delete might not work yet.  IMAP-over-SSL /might/, but the server I was
  testing against wasn't working with SSL (no connection).
  -handle email.Utils.getaddresses returning None.  Thanks:  Frankye Fattarelli.
  -fix default port for MultidropPOP3SSLRetriever.

Version 4.0.0a7
17 June 2004

  -debug and rewrite POP3-over-SSL functionality.  Involved writing around
  some ugly limitations and kludges in Python's socket.ssl and poplib.POP3
  code.  But POP3-over-SSL actually works now, and is fairly clean.
  Let me know if it hangs; I might need to change the way blocking mode is
  handled on the underlying socket.

Version 4.0.0a6
16 June 2004

  -add pseudofile class to implement readline() and sslwrapper to implement
  sendall() on ssl objects.
  ssl objects in Python don't behave like a file, or like a socket; they're just
  ... broken. It's a deficiency in the Python standard library.
  This might make POP3-over-SSL work, or it might need more work yet.  I've
  got it talking some SSL, but it hangs at the moment.  Might be blocking
  in read().
  -move Mboxrd file locking to _deliver_message().  Thanks:  Frankye Fattarelli.
  -make --trace more useful and add extra debug info to main script.
  -eliminate noise from defaults in non-[options] section processing
  -found Python's ConfigParser .getboolean() method failed when the passed-in
  default was a non-string.  Maybe I should have stayed with my own
  replacement configuration parser, as it properly handled this case ...
  submitted a patch to the Python bug tracker and added a workaround to
  getmail for the moment.
  -/really/ enable delete and read_all in [options] of rc file.

Version 4.0.0a5
16 June 2004

  -document tuple syntax.  Thanks:  Frankye Fattarelli.
  -fix "filters" name collision in script.  Thanks:  Frankye Fattarelli.

Version 4.0.0a4
15 June 2004

  -fix default values in three classes' parameters which previously relied
  on type conversion.  Thanks: Andrew Raines.
  -fix default port for POP3-over-SSL and "username" parameter in documentation.
  Thanks: Frankye Fattarelli.
  -enable delete and read_all in [options] of rc file.  Change handling of
  verbose.

Version 4.0.0a3
15 June 2004

  -fix typo in processing filters.  Thanks: K. Shantanu.
  -fix typo in processing non-default parameters.  Thanks: Andrew Raines.
  -document SSL retrievers
  -move retrievers.py configuration functionality into ConfigurableBase class
  -convert filters.py to use ConfigurableBase
  -convert destinations.py to use ConfigurableBase

Version 4.0.0a2
14 June 2004

  -fix default/'default' in filters module.  Thanks: Andrew Raines.
  -add the mix-in classes for SSL support with POP3 classes.  Meant small
  rewrites to the POP3 classes, but the design should be even cleaner now.

Version 4.0.0a1
14 June 2004

  -first alpha release of getmail version 4


Changes since getmail version 3
-------------------------------

-complete rewrite
-switch to Python version 2.3.3:
  -increased code readability (augmented assignment, list comprehensions,
    string methods, etc)
  -eliminate external modules (ConfParser, timeoutsocket)
  -use standard library modules which have come up to reasonable levels
    of quality and functionality over old custom code (optparse,
    ConfigParser)
  -no longer require workarounds for older, broken standard library modules/
    functions
-modular, object-oriented framework for retrievers, destinations, filters
  allows extensibility
-make more platform-agnostic (transparently support system EOL convention,
  etc)
-support for multiple retriever/account types:
  -POP (single-user, multidrop, SDPS)
  -IMAPv4 (single-user, multidrop)
-full native support for POP3-over-SSL and IMAP-over-SSL.
-configuration (rc) file format changes:
  -support multiple rc files per invocation
  -one mail account per rc file
