NEWS for aiosmtpd¶
- Apache License version 2.0
- Support for SMTP
AUTH, with AUTH hooks feature
- Built-in implementation for
AUTH LOGINlogic (fixes #102)
- Feature to inject keyword args during server class instantiation in
Controller.factory(potentially fixes #194, #179)
- Support for Python 3.8 and 3.9.0 (also fixes #188)
- Don’t strip last
\r\nprior to terminating dot.
- Slight improvement to make Test Suite more maintainable
- No more failures/DeprecationWarnings for Python 3.8 (fixes #167)
- Faster method access for
- Unit Tests that mocked too deep, possibly masking observable internal behaviors
- Drop support for Python 3.5
- Improve the documentation on enabling
STARTTLS. (Closes #125)
- Add customizable ident field to SMTP class constructor. (Closes #131)
- Remove asyncio.coroutine decorator as it was introduced in Python 3.5.
- Add Controller docstring, explain dual-stack binding. (Closes #140)
- Gracefully handle ASCII decoding exceptions. (Closes #142)
- Fix typo.
- Improve Controller ssl_context documentation.
- Add timeout feature. (Partial fix for #145)
- Drop support for Python 3.4.
- As per RFC 5321, §4.1.4, multiple
EHLOcommands in the same session are semantically equivalent to
RSET. (Closes #78)
- As per RFC 5321, $18.104.22.168,
NOOPtakes an optional argument, which is ignored. API BREAK If you have a handler that implements
handle_NOOP(), it previously took zero arguments but now requires a single argument. (Closes #107)
- The command line options
-vhas been added to print the package’s current version number. (Closes #111)
- General improvements in the
Controllerclass. (Closes #104)
- When aiosmtpd handles a
STARTTLSit must arrange for the original transport to be closed when the wrapped transport is closed. This fixes a hidden exception which occurs when an EOF is received on the original tranport after the connection is lost. (Closes #83)
- Widen the catch of
CancelledErrorto also catch such errors from handler methods. (Closes #110)
- Added a manpage for the
aiosmtpdcommand line script. (Closes #116)
- Added much better support for the
HELP. There’s a new decorator called
@syntax()which you can use in derived classes to decorate
smtp_*()methods. These then show up in
HELPresponses. This also fixes
HELPresponses for the
LMTPsubclass. (Closes #113)
Controllerclass now takes an optional keyword argument
ssl_contextwhich is passed directly to the asyncio
- Improved documentation.
- The connection peer is displayed in all INFO level logging.
- When running the test suite, you can include a
-Eoption after the
--separator to boost the debugging output.
- The main SMTP readline loops are now more robust against connection resets and mid-read EOFs. (Closes #62)
Proxyhandlers work with
SMTPservers regardless of the value of the
- The command line script is now installed as
SMTPclass now does a better job of handling Unicode, when the client does not claim to support
SMTPUTF8but sends non-ASCII anyway. The server forces ASCII-only handling when
enable_SMTPUTF8=False(the default) is passed to the constructor. The command line arguments
enable_SMTPUTF8=Trueare no longer mutually exclusive.
- Officially support Windows. (Closes #76)
- A new handler hook API has been added which provides more flexibility but
requires more responsibility (e.g. hooks must return a string status).
- Deprecate handler
process_message()methods. Use the new asynchronous
handle_DATA()methods, which take a session and an envelope object.
- Added the
STARTTLSextension. Given by Konstantin Volkov.
- Minor changes to the way the
rcpt_options(although the latter is still not support in
DATAmethod now respects original line endings, and passing size limits is now handled better. Given by Konstantin Volkov.
Controllerclass has two new optional keyword arguments.
ready_timeoutspecifies a timeout in seconds that can be used to limit the amount of time it waits for the server to become ready. This can also be overridden with the environment variable
AIOSMTPD_CONTROLLER_TIMEOUT. (Closes #35)
enable_SMTPUTF8is passed through to the
SMTPconstructor in the default factory. If you override
Controller.factory()you can pass
- Handlers can define a
handle_tls_handshake()method, which takes a session object, and is called if SSL is enabled during the making of the connection. (Closes #48)
- Better Windows compatibility.
- Better Python 3.4 compatibility.
flufl.testingpackage for nose2 and flake8 plugins.
- The test suite has achieved 100% code coverage. (Closes #2)
- The SMTP server connection identifier can be changed by setting the
__ident__attribute on the
SMTPinstance. (Closes #20)
- Fixed a new incompatibility with the
- Fix typo in
Message.prepare_message()handler. The crafted
X-RcptTosheader is renamed to
X-RcptTofor backward compatibility with older libraries.
- Add a few hooks to make subclassing easier:
SMTP.ehlo_hook()is called just before the final, non-continuing 250 response to allow subclasses to add additional
SMTP.rset_hook()is called just before the final 250 command to allow subclasses to provide additional
Controller.make_socket()allows subclasses to customize the creation of the socket before binding.
- Officially support Python 3.6.
- Fix support for both IPv4 and IPv6 based on the
--listenoption. Given by Jason Coombs. (Closes #3)
- Correctly handle client disconnects. Given by Konstantin vz’One Enchant.
- The SMTP class now takes an optional
hostnameargument. Use this if you want to avoid the use of
socket.getfqdn(). Given by Konstantin vz’One Enchant.
- Close the transport and thus the connection on SMTP
QUIT. (Closes #11)
- Added an
AsyncMessagehandler. Given by Konstantin vz’One Enchant.
- Add an examples/ directory.
- Flake8 clean.
- Initial release.