Version 6.20.00
15.June.2026
    - Merge pull request #262 from jperryhouts/fixup-retry-lmtp (Fix mangled function arg)
    - fix #263: delete=true should not be necessary if mark_read=true
    - #265: Use `--idle=` to mean IDLE ON (uses mailboxes in getmailrc).
    - fix #271: automate update of gh-pages for getmail6
    - "make dockertest" to use docker-mailserver 15.1

Version 6.19.12
20.February.2026
    - "make tag" did not push local commit in preparation for v6.19.11. v6.19.12 to avoid overriding tag.

Version 6.19.11
20.February.2026
    - use two step POP3 XOAUTH2, needed for Microsoft O365 (#256)
    - Fix getmail_fetch with python 3 (#261)
    - python 3.14 imaplib.py change makes file to private _file and exposes a read-only file property (#260)
    - Retry LMTP connection on SMTPSenderRefused exception (#257)

Version 6.19.10
17.August.2025
    - fix MacOS issue #250 forcing fork method in multiprocessing (by @jymigeon)

Version 6.19.09
14.August.2025
    - Fix get_code in getmail-gmail-xoauth-tokens (#248, garylin/patch-1)
    - Unhandled Exception for SimpleIMAPSSLRetriever when password contains non-ascii chars (#244)
    - fix #247: Faulty error messages "server does not support IDLE"
    - fix #243: KeyError: "code" -> Google approval URL format has changed
    - Use multiprocessing instead of mixing signals and threading condvars for process synchronization (#246, jymigeon)
    - Python 3.14 related fixes (#242, meeuw/python3.14)

Version 6.19.08
14.May.2025
    - fix #105 by converting empty string to None, which has smtplib handling
    - fix #226 by handling all Exception instead of just OSError on SIGCHLD to parent
    - fix #239 by catching ssl.SSLError
    - Merge pull request #237 from meeuw/integration-tests
    - remove python 2 code: only supporting python 3
    - Merge pull request #238 from yshingai/v6.19.07-add-alias
    - support windows-874 cp874
    - Merge pull request #234 from meeuw/fix-incorrect-fsf-address
    - Merge pull request #233 from meeuw/fix-license
    - #220 allow uid_cache=true (latest UID from oldmail-file) in addition to uid_cache=<uidfile>

Version 6.19.07
26.January.2025
    - #225 Missing comma in getmailcore/message.py

Version 6.19.06
18.January.2025
    - #223 publish to pypi workflow
    - #219 #220 increase IMAP efficiency through uid_cache  (needs to be configured) storing last fetched UID
    - updated tests
    - update copyright to 2025

Version 6.19.05
02.October.2024
    - fix #211: --only-oldmail-file command line = only_oldmail_file config: regenerate oldmail file with mails currenlty on server
    - fix #212: oldmail-* reverts when --to-oldmail-on-each-mail is used 
    - Pyp2 fixes (#210)
    - fix #209: using the suggested simpler fix as pathlib is not used so far
    - build and upload sdist
    - Fix invalid SPDX expression

Version 6.19.04
25.August.2024
    - Update getmailrc-examples (#204, #206, #207)
    - #205: pop3: Support use_xoauth2

Version 6.19.03
08 July 2024
    - #199 fix: fails with "TypeError: IMAP4_SSL.__init__()" after changing to Python 3.12 (when keyfile/certfile in config)

Version 6.19.02
01 July 2024
    - #196 fix: handle KeyError (getmail-gmail-xoauth-tokens)
    - #197 fix: detect if --port is set to force the use of the local http server (getmail-gmail-xoauth-tokens)

Version 6.19.01
7 June 2024
    - #195 fix: make mark_read option act same as -ds,

Version 6.19.00
31 May 2024
    - #191 -m/--mark-read and mark_read in [options] of rcfile
    - #190 -o/--only-account to choose rcfile by username (=email)
    - #189 IMAP retrievers support imap_id_extension
    - #137 Add mailbox name to log line

Version 6.18.14
20 March 2024
    - fix make lint
    - fix #183: in case of TypeError keyfile and certfile are used later in wrap_socket (Python 3.12)
    - fix #182: make log to trace
    - Allow to customize 'redirect_uri' (pull request #179 from jerome-pouiller/master)
    - fix #176: Maildir Filename Generation Issue with Truncated Hostname (use full hostname)
    - remove "Labels" before deleting uid (pull request #175 from ewft/fix_gmail_deletion)
    - Redact real email in test data (pull request #170 from h3xx/remove-email)

Version 6.18.13
22 August 2023
    - not doing python2 tests any more
    - #169 failure to recover corrupt message
    - #168 LookupError: unknown encoding: unicode
    - #167 from cclauss/ruff (lint python code with ruff)
    - #166 help about write access to oauth2 token file
    - bring getmail and getmails rc file filtering in sync
    - #160 from MatthiasPetermann/master (Enable overriding the prompt parameter in the XOAUTH URL)
    - #158 from horrad/master (Ignore directories in getmailrcdir)

Version 6.18.12
21 January 2023
    - #156 Continue after error in child
    - #157 undo #148 getmails shell quoting

Version 6.18.11
1 January 2023
    - #149 (h3xx/fix-shell-quote) added ability to process token creation on a headless server (device without a browser)
    - #146 (ykasap/appperms) Fix shell quoting issue
    - #145 add "offline_access" permission in Example 13 docs/getmailrc-examples (Exchange Online)
    - #141 add documentation for --searchset/-s
    - #142 dont consider hidden files as config file (if no --rcfile)
    - #138 (ChrisTG742) partial fix for #135 (getmail-gmail-xoauth-tokens errors are confusing)
      HTTP exception handling for GET requests
    - #134 (ChrisTG742) fix #129 (MDA_external: screen output of called script silently dropped)
      new option "pipe_stdout" to the [destination] settings block
    - #148 getmails shell quoting

Version 6.18.10
20 September 2022
    - readme: mention "app password" for gmail
    - fix #122: Inappropriate error message for external password command
    - fix #125: exclude files ending in .json if no --rcfile
    - pull #131: Update getmailrc-examples (ChrisTG742/getmail6)
    - fix #132: forward to corrupted_message on encoding problems

Version 6.18.9
11 May 2022
    - pull #115: Add support for local webserver to receive oauth2 redirect
    - #119: NameError: name 'CertificateError' is not defined (ca_certs option)

Version 6.18.8
09 May 2022
    - #118: redirect_uri requirements in Microsoft's OAuth 2.0

Version 6.18.7
08 May 2022
    - #116: Update to avoid use of depreciated Google OAuth2 flow
    - #114: Fails with "Killed" when retrieving large emails
            use timeout for socket also as wait timeout for child
    - #112: getmail keeps downloading the whole mailbox
            new to_oldmail_on_each_mail option.
    - #111: DeprecationWarnings from ssl

Version 6.18.6
08 January 2022
    - #104: add config parameter to MDA_lmtp to override recipient address (WIP)
    - #103: Fix random token generation
    - #101: Fix ignored netrc_file option
    - #94: bad message from server!' and empty messages

Version 6.18.5
30 October 2021
    - #93: IMAP: Deal better with untagged status updates
    - #95: UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa9 in position 0: invalid start byte
    - #96: getmail_fetch: TypeError: method expected 2 arguments, got 3

Version 6.18.4
26 September 2021
    - #91: UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 11: ordinal not in range(128)
    - #92: getmail_maildir: bugfix for python3 using bytes buffer instead of str
    - add new use_netrc and netrc_file configuration options to support reading secrets from a .netrc file
      (https://marc.info/?l=getmail&m=163241430111986&w=3).

Version 6.18.3
06 July 2021
    - #89: fetchmail feature: skip fetching read mail.
      New `imap_search` and `imap_on_delete` to fetch only `Unseen` messages and set them to `\Seen`.
    - add `-s/--searchset` to override imap search and setting of flags for all rcfile's in the command
    - if no `--rcfile` and no default `getmailrc`, then use all files from the `--getmaildir` folder
    - fix "SyntaxError: Non-ASCII in file, but no encoding declared" (only Python 2.7)

Version 6.17
15 June 2021
    - #79: UnicodeEncodeError: 'ascii' codec can't encode character in position
    - #78: Don't encode pure ASCII X-getmail-retrieved-from-mailbox
    - #69: skip_imap_fetch_size. IMAP requests size, making davmail download all the messages every time, making it slow
    - #81: Allow having IMAP message IDs recorded in headers (if received=True in config)
    - #82: Add branding to Received header
    - #85: Discuss content of oldmail files in FAQ

Version 6.16
13 May 2021
    - #73: Additional exception handling for IMAP IDLE with xoauth2
    - #74: 'ascii' codec can't encode characters in position 4017-4018
    - #75: Bring back "getmails" wrapper (was a Debian addition, but fits well to getmail itself)
    - #76, #77: Revert replaced strings (from "2020" to "2021") in docs/CHANGELOG

Version 6.15
21 March 2021
    - #67 Implement a destination that delivers to a local LMTP server
    - #71 allow "=" in ssl_ciphers to allow "ssl_ciphers = DEFAULT@SECLEVEL=1"
    - #72 non-compliant e-mail header (in multidrop configuration) causes getmail to stop working
    - Added test folder: run tests with `make test`. Tests and fixes.

Version 6.14
14 January 2021
    - #64 getmail6: sometimes dies on running external filter program in version 6.13
    - #65 Wait much longer, and raise an exception when timeout (pull from ykasap/fix-timeout to solve #64)
    - #63 Trap exceptions caused by xoauth2 token expiration
    - #61 Refresh the OAuth access token when reconnecting (IMAP IDLE)

Version 6.13
07 January 2021
    - fix #59: Traceback while trying to reap child process
    - fix #60: Need to refresh the OAuth access token when reconnecting (IMAP IDLE)

Version 6.12
31 December 2020
    - fix #53: unclosed file warnings
    - fix #52: getmail seems to lose its child process and hangs forever (pull #54)
    - documentation improvements (#55, #56)

Version 6.11
09 December 2020
    - comply more closely with the XDG basedir specification: allow an
      unset XDG_CONFIG_HOME environment variable.
    - Simplify the documentation around the location of the configuration directory.
    - fix #49: "'utf-8' codec can't decode" for mbox

Version 6.10
28 November 2020
    - fix #48: handle Header in address_no_brackets using Header.__str__

Version 6.9
02 November 2020
    - fix python 3.9 issues #42 #44
    - fix regex warning #45
    - add usage of Python keyring package in addition to gnomekeyring (#43)

Version 6.8
07 October 2020
    - fix #37: update copyright date and notices
    - fix #39: Slow mail retrieval
    - pull #40: fix UnboundLocalError when socket.error inside POP3_SSL_EXTENDED

Version 6.7
01 September 2020
    - use $XDG_CONFIG_HOME if defined
    - fix pip install (doc/man below site-packages)
    - fix #34: quote only for select

Version 6.6
29 August 2020
    - fix #34: quote mailbox if necessary
    - fix #36: use setuptools, suggest pip to install and uninstall

Version 6.5
28 August 2020
    - fix #23: port getmail-gmail-xoauth-tokens
    - fix #24: TypeError: 'gaierror' object is not subscriptable
    - documentation fixes

Version 6.4
24 August 2020
    - fix #20: mboxrd can't concat str to bytes
    - fix #21: version numbering from 6.0x to 6.x

Version 6.03
17 August 2020
    - fix #14: IDLE not working
    - documentation update

Version 6.02
12 August 2020
    - try to do as little own decoding as possible
    - issue #8

Version 6.01
    - fixes of reported issues on github up to #7

Version 6.00
02 May 2020
    - Make code compatible to Python 3 (losing some backward compatibility)

Version 5.14
19 August 2019
    -remove socket setblocking() calls which should be no longer needed,
    and which may have caused hangups.  Thanks: Viacheslav Chimishuk.
    -correct version number string in error message.  Thanks: Piet van
    Oostrum.

Version 5.13
22 February 2019
    -second attempt at fixing SNI change with Python < 2.7.  Thanks: "Cimbal".

Version 5.12
22 February 2019
    -bugfix: the SNI change broke something else with Python 2.6 and earlier;
    fixed.  Thanks: "Cimbal".

Version 5.11
13 February 2019
    -bugfix: the SNI change did not work correctly with Python < 2.7.13;
    should be fixed now.  Thanks: Scott Robbins.

Version 5.10
12 February 2019
    -experimental: when SSL SNI support is present in the underlying Python
    (and OpenSSL), send SNI by default in the SSL setup.  This should work
    around Gmail's brokenness with TLSv.1.3 connections when SNI is not sent.

Version 5.9
    -documentation-only update; add note with workaround for Gmail SSL
    connections with OpenSSL 1.1.1 and later.
    -update copyright dates.

Version 5.8
9 November 2018
    -fix problem handling IMAP errors introduced in 5.7.  Thanks:
    Andreas Reuleaux.

Version 5.7
30 October 2018
    -when users specify an SSL version that no longer exists in the Python
    ssl module, do not result in an unhandled exception.  Thanks: "nandre".
    -catch IMAP UNAVAILABLE temporary error during login.  Thanks:
    Dario Corti.

Version 5.6
02 April 2018
    -fix references to version 4 in README.  Thanks: Daniel Kahn Gillmor.
    -add Gmail-specific XOAUTH2 login support for IMAP.  Thanks: Stefan Krah.

Version 5.5
18 December 2017
    -feature request: added record_mailbox configuration parameter, to allow
    turning off the header getmail adds with this information.
    Thanks: Daniel Kahn Gillmor, Osamu Aoki,  Josh Triplett.

Version 5.4
6 October 2017
    -bugfix: fix another error in logging an error condition.  Thanks: "ng0".

Version 5.3
5 October 2017
    -bugfix: another case where an error condition resulted in getmail not
    displaying the correct message.  Thanks: "ng0".

Version 5.2
4 October 2017
    -bugfix: disconnection during IMAP IDLE could result in an error message
    rather than silently exiting.  Thanks: David Gray.

Version 5.1
15 July 2017
    -bugfix: if password_command parameter was used with a non-existent program,
    getmail would error out during the handling of that condition and not report
    the problem correctly.

Version 5.0
15 July 2017
    -new release numbering scheme; previous version numbers were just getting
    too high.
    -catch and ignore/exit cleanly after reset connection in IMAP IDLE mode.
    Thanks:  Stephan Schulz.
    -allow specifying an expected SSL certificate hostname, for when the
    server's certificate does not match the domain name used to connect to
    it.  Thanks:  "Andre".
    -fix error message not actually giving the header field name incorrectly
    specified as containing the envelope recipient address.  Thanks:  Hardy
    Braunsdorf.
    -add new password_command configuration parameter for retrievers, allowing
    getmail to retrieve the account password from any arbitrary external
    command.  Suggestion:  "ng0".

Version 4.54.0
19 February 2017
    -fix error running getmail_fetch introduced in 4.53.0.  Thanks: "fsckd"
    of Arch Linux.

Version 4.53.0
15 January 2017
    -fix plaintext version of docs not generated correctly.  Thanks: Elijah.
    -fix `getmail --fingerprint` not logging server TLS fingerprint correctly
    with SimplePOP3SSLRetriever.  Thanks: Gabriel Kihlman.

Version 4.52.0
22 October 2016
    -add `ignore_header_shrinkage` parameter to Filter_external for users who
    know it is normal for their particular filter to result in a smaller message
    header than the source message, for example when the filter encapsulates
    the original message in a simpler wrapper message.  Thanks: "RW",
    Tristan Miller, Francesco Ariis.
    -EXPERIMENTAL: when deleting a message from an IMAP mailbox, set the \Seen
    flag in addition to the the \Deleted flag.  This apparently prevents
    the ever-innovatively-broken MSExchange from sending a spurious incorrect
    disposition-notification message to the sender of the message.  I do not
    know if this will cause problems with other broken IMAP server
    implementations; please send a report to the getmail-user's mailing list if
    you see odd behaviour with this change.  Thanks: John Hein.
    -enable socket timeouts for IMAP SSL classes by default.  They were disabled
    in the code because they were incompatible with SSL in older versions of
    Python.  If you see problems with Python 2.6 or 2.7 now, please let me know.

Version 4.51.0
11 September 2016
    -fix exception when using MDA_External and an IMAP mailbox whose name
    contains non-ASCII chars.  Thanks:  "drtmk".

Version 4.50.0
11 July 2016
    -maybe fix handling of OSX keychain passwords containing double-quote chars.
    Thanks: Teddy Wing, Patrick Asselman.
    -fix getmail erroring out on IMAP folders containing i18n chars.
    Thanks: Jan Stühler.

    Version 4.49.0
13 January 2016
    -make IMAP class only issue EXPUNGE command on mailbox close if we have
    actually deleted any messages from the open mailbox.  Makes use of read-only
    IMAP folders possible.  Thanks: Zoltan Padrah.

Version 4.48.0
31 May 2015
    -work around brain-damaged change in Python's poplib which causes
   message retrieval errors if any line of a message has more than
   2048 characters in it.
    -restore link to moved Marc mailing list archive.  Thanks:
    David J. Weller-Fahy.

Version 4.47.0
25 February 2015
    -try to work around pathological breakage in one random POP server
    implementation.  Thanks: Michael Thomas Kockmeyer.
    -remove dead marc.theaimsgroup.com list archive from docs.  Thanks:
    Miroslav Rovis.
    -bugfix: if you combined IMAP IDLE mode with delete_after, getmail would,
    after remaining connected to the server for the number of days configured,
    begin deleting messages immediately after retrieval instead of after the
    configured delay.  Now fixed.  Thanks: Johannes Weißl.

Version 4.46.0
6 April 2014
    -fix --idle checking Python version incorrectly, resulting in incorrect
    warning about running with Python < 2.5.  Thanks: "Voytek", Krzysztof
    Warzecha.
    -add missing support for SSL certificate checking in POP3 which broke
    POP retrieval in v4.45.0.  Requires Python 2.6 or newer.  Thanks: "mancha".

Version 4.45.0
30 March 2014
    -perform hostname-vs-certificate matching of SSL certificate if validating
    the certificate.  Thanks: "mancha".
    -fix missing plaintext versions of documentation.

Version 4.44.0
22 March 2014
    -add extended SSL options for IMAP retrievers, allowing certificate
    verification and other features.  Thanks: Steven Murdoch.
    -fix missing plaintext versions of documentation.  Thanks: Osamu Aoki.
    -fix "Header instance has no attribute 'strip'" error which cropped up
    in some configurations.  Thanks: Krzysztof Warzecha.

Version 4.43.0
25 August 2013
    -add IMAP IDLE support.  Thanks: Jon Gjengset.

Version 4.42.0
3 August 2013
    -fix problem with non-ascii characters in newly-added message header fields
    with output from Filter_classifier.  Thanks: "Gour".

Version 4.41.0
26 May 2013
    -messages retrieved with POP could have a blank trailing line removed when
    delivered; fixed.  Thanks: Christoph Mitterer, Krzysztof Warzecha.
    -fix an ImportError when IMAP retriever used with getmail under Python 2.4.

Version 4.40.3
10 May 2013
    -increase system recursion limit when run with Python 2.3, to prevent
    recursion errors in parsing some pathologically complex MIME emails.
    Thanks: Kenneth Pronovici.

Version 4.40.2
8 May 2013
    -fix a backwards incompatibility with Python 2.3 and 2.4 introduced in
    getmail 4.38.0.  Thanks: Massimo Zambelli, Krzysztof Warzecha.

Version 4.40.1
22 April 2013
    -again change protocol codes passed to OSX, as they're not only reserved
    codes, but also case-sensitive.  Use the ones an OSX user reports work
    properly.  Thanks: Tim Gray.

Version 4.40.0
21 April 2013
    -convert SIGTERM to SIGINT so getmail can cleanup and exit normally if
    killed with a default signal.  Thanks: Carl Lei.
    -fix change which resulted in passing full protocol name to OSX keyring
    program, which can't handle it (restricted to 4-character code).
    Thanks: Tim Gray.

Version 4.39.1
10 March 2013
    -fix a bug that could crop up when retrieving mail via IMAP from Gmail, and
    the Gmail servers provided weird data in their header extensions.
    Thanks: Krzysztof Warzecha.

Version 4.39.0
22 February 2013
    -fix an oldmail filename issue that occurred with certain non-ASCII
    characters in an IMAP mailbox name.  Thanks: Michael Kockmeyer.

Version 4.38.0
16 February 2013
    -fix retrieving mail from an IMAP mailbox with non-ASCII characters in its
    name causing difficult-to-understand unicode errors during delivery.
    Thanks: "fsLeg", Krzysztof Warzecha.

Version 4.37.0
27 January 2013
    -handle IMAP servers which include "/" in message IDs better, so those
    messages aren't always thought to be new.  Thanks: Bradley Rintoul.
    -record (IMAP) mailbox retrieved from in X-getmail-retrieved-from-mailbox:
    header field, and make it available as %(mailbox) substitution in
    MDA_external arguments.  Thanks: Les Barstow.
    -add delete_bigger_than option to allow removal of large messages after
    retrieval, even if not deleting messages otherwise.  Thanks: Jan Vereecke.

Version 4.36.0
15 December 2012
    -add support for retrieving POP/IMAP passwords from, and storing them to,
    the Gnome keyring.  Thanks: Krzysztof Warzecha, Scott Hepler.

Version 4.35.0
24 October 2012
    -fix From_ quoting in mbox delivery; use of the Python stdlib function
    meant getmail was incorrectly using mboxo-style quoting instead of
    mboxrd quoting, probably since early in the v4 series.
    Thanks: Christoph Mitterer.

Version 4.34.0
8 September 2012
    -retrieve Gmail metadata (labels, thread ID, message ID) via IMAP extension
    and record it in new message headers.  Thanks: Krzysztof Warzecha.

Version 4.33.0
7 August 2012
    -allow normal exit on interrupt (ctrl-c) to allow the user to abort message
    retrieval while still remembering already-retrieved messages as successfully
    delivered.  You may get a weird error message after you abort, since the
    server may be in the middle of delivering another message to getmail at the
    time.  Thanks: Krzysztof Warzecha.

Version 4.32.0
6 July 2012
    -prevent some nuisance stack traces if getmail cannot connect to the POP/
    IMAP server correctly.  Thanks: Daniel Dumke.
    -restore use_peek IMAP retriever parameter which accidentally got removed
    in 4.30.  Thanks: Andreas Amann.

Version 4.31.0
5 July 2012
    -improved backwards compatibility with pre-v.4.22.0 oldmail files, so IMAP
    mail is not re-retrieved if you upgrade from a 4.22 or earlier to this one;
    no user action necessary.  Thanks: Osamu Aoki, Tim van der Molen.

Version 4.30.2
27 June 2012
    -fix a nuisance stack trace that would be dumped if a connection failed in
    particular states.  Thanks: Gary Schmidt.

Version 4.30.1
21 June 2012
    -silence a nuisance deprecation warning about the sets module when running
    with Python >= 2.5 which was reintroduced in 4.29.0.  Thanks: Stephan
    Schulz.

Version 4.30.0
21 June 2012
    -fix breakage introduced in 4.29.0 where BrokenUIDLPOP3Retriever would fail
    with a TypeError at logout time.  Thanks: Scott Robbins, Stephan Schulz.
    -fix breakage introduced in 4.29.0 where deleted mail was not being expunged
    from the last (or only) folder retrieved from in an IMAP session.  Thanks:
    Paul Howarth.

Version 4.29.0
19 June 2012
    -update old contact information for Free Software Foundation.  Thanks: Ricky
    Zhou.
    -fix incorrect character encoding in plaintext documentation.  Thanks: Ricky
    Zhou.
    -ensure getmail exits nonzero if a server refuses login due to a credential
    problem.  Thanks: Stephan Schulz.

Version 4.28.0
26 May 2012
    -ensure getmail exits nonzero if various error conditions (like POP/IMAP
    authentication failure) occur.  Thanks: Ryan J., Stephan Schulz.
    -python versions prior to 2.5.0 contain a bug when dealing with read-only
    IMAP mailboxes.  Monkey-patch imaplib when running with Python<2.5.0.
    Thanks: Les Barstow.
    -do IMAP modified-utf7 conversion of mailbox names containing non-ASCII
    characters.  Thanks: A. Lapraitis, Randall Mason.
    -add special ALL value for retrieving mail from all selectable IMAP
    mailboxes in the account.
    -change IMAP retrieval strategy to retrieve all messages from a mailbox,
    then move on to the next mailbox, etc.  Should result in increased speed,
    but if you set `max_messages_per_session` too low, this could result in
    later mailboxes not being retrieved from.

Version 4.27.0
20 May 2012
    -make use of IMAP BODY.PEEK configurable; set the IMAP retriever parameter
    `use_peek` to False to disable use of PEEK to get getmail's historical IMAP
    behaviour.

Version 4.26.0
14 April 2012
    -switch to using BODY.PEEK in IMAP retrieval; I no longer see problems with
    this feature in my testing.  If users experience incompatibility with any
    IMAP servers where 4.25.0 worked, please let me know.

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
