libnet 1.22  -- Sun Aug 26 07:13:18 CDT 2007

Bug Fixes
  * Fix a bug in Net::Cmd that is_utf8 does not exist prior to perl 5.8.1

libnet 1.21  -- Sat May 19 08:53:09 CDT 2007

Bug Fixes
  * Fix bug causing utf8 encoding of 8bit strings in Net::Cmd
  * Fix precedence issue in Net::NNTP. Patch from Brendan O'Dea
  * Fixed bug causing removal of last character on the line when
    doing ASCII FTP transfers

Enhancements
  * Add support for ENVID and AUTH to Net::SMTP. Patch by Mark Martinec
  * Changed default for FTP transfers to be passive
  * Added support for FTP FEAT command

libnet 1.20  -- Fri Feb  2 19:42:51 CST 2007

Bug Fixes
  * Fixed incorrect handling of CRLF that straddled two blocks
  * Fix bug in response() which was too liberal in what it thought was a response line
  * Silence uninitialized value warnings in Net::Cmd during testing on Win32
  * Documentations typos and updates

Enhancements
  * Added support for ORCPT into Net::SMTP
  * Support for servers that expect the USER command in upper or lower case. Try USER
    first then try user if that fails

libnet 1.19  -- Wed Jun 30 14:53:48 BST 2004

Bug Fixes
  * Fixed datasend test to work on Win32 platform
  * Fixed Authen::SASL checking in SMTP.pm and POP3.pm
  * Fixed bug that a restarted get with Net::FTP did not append to local file

libnet 1.18  -- Mon Mar 22 16:19:01 GMT 2004

Bug Fixes
  * Fixed bug in CRLF translation in Net::Cmd datasend/dataend methods
  * Fixed bug in converting numbers returned by PASV command into a
    packed IP address
  * Fixed bug that caused Net::FTP->get to truncate the local file after
    the restart method had been called
  * Fixed bug in Net::FTP-.rmdir when the server returned . and .. in
    the contents of a directory
  * Fixed bug in POP3 that was sending unnecessary RSETs

Enhancements
  * Added support for POP3 CAPA command
  * Added support for XVERP to Net::SMTP
  * Added Net::POP3->banner method to return the banner received from
    the server during connect
  * Added Net::POP3->auth method for performing authentication using
    SASL, requires Authen::SASL
  * Added Host option to ->new constructor of FTP, NNTP, SMTP and POP3
    which can be used instead of passing the host as the first argument
  * Added ->host method to FTP, NNTP, SMTP and POP3 to return the host
    string used for the connect. This is useful to determine which host
    was connected to when multiple hosts are specified
  * Added support for more non-standard responses to Net::FTP->size
  * Updated POD for Net::SMTP wrt. not passing a Hello parameter to the
    constructor. (Jeff Macdonald)

ChangeLogs for releases prior to 1.18 may be found at
http://svn.mutatus.co.uk/browse/libnet/tags/libnet-1.17/ChangeLog
