1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329
|
###################
NEWS for aiosmtpd
###################
1.5.0 (aiosmtpd-next)
=====================
Added
-----
* Unthreaded Controllers (Closes #160)
Fixed/Improved
--------------
* All Controllers now have more rationale design, as they are now composited from a Base + a Mixin
* A whole bunch of annotations
1.4.3 (2022-12-21)
=====================
Fixed/Improved
--------------
* Is now compatible with uvloop
* Add compatibility for Python 3.10 and 3.11 (Closes #322)
* Test matrix update (Closes #306)
* Drop Python 3.6, PyPy 3.6 (some) and MacOS 10
* Add Python 3.10 & 3.11, PyPy 3.7 & 3.8, Ubuntu 22.04, MacOS 11 & 12
* Expanded tox environments
* Longer AUTOSTOP_DELAY especially for Windows (Closes #313)
* Update signing keys
* Some documentation fixes
1.4.2 (2021-03-08)
=====================
Fixed/Improved
--------------
* Controller's ``ready_timeout`` parameter increased from ``1.0`` to ``5.0``.
This won't slow down Controller startup because it's just a timeout limit
(instead of a sleep delay),
but this should help prevent Controller from giving up too soon,
especially during situations where system/network is a bit busy causing slowdowns.
(See #262)
* Timeout messages in ``Controller.start()`` gets more details and a mention about the
``ready_timeout`` parameter. (See #262)
* Prevent sensitive AUTH information leak by sanitizing the repr()
of AuthResult and LoginPassword.
1.4.1 (2021-03-04)
==================
Fixed/Improved
--------------
* Maximum length of email address local part is customizable, defaults to no limit. (Closes #257)
1.4.0 (2021-02-26)
==================
Added
-----
* Support for |PROXY Protocol|_ (Closes #174)
* Example for authentication
* SSL Support for CLI. See :ref:`the man page <manpage>` for more info. (Closes #172)
* New :class:`UnixSocketController` class to implement Unix socket-based SMTP server
(Closes #114)
.. _`PROXY Protocol`: https://www.haproxy.com/blog/using-haproxy-with-the-proxy-protocol-to-better-secure-your-database/
.. |PROXY Protocol| replace:: **PROXY Protocol**
Fixed/Improved
--------------
* ``pypy3`` testenv for tox can now run on Windows
* ``static`` testenv now auto-skipped on Windows
* Now uses Sphinx's Doctest facility, which is much more flexible than pytest's doctest
1.3.2 (2021-02-20)
==================
Added
-----
* GPG Signing Key info to ``README.rst`` and PyPI Long Desc
* Hidden ``static`` test env for static code checking
Fixed/Improved
--------------
* Fixed Documentation Issues that might cause automatic package builders to fail
* Also consider ``EAFNOSUPPORT`` in IPv6 detection (Closes #244, again)
* Update PyPI Long Description
1.3.1 (2021-02-18)
==================
Fixed/Improved
--------------
* ``ready_timeout`` now actually enforced, raising ``TimeoutError`` if breached
* Hides only expected exceptions raised by ``Controller._testconn()``
* No longer fail with opaque "Unknown Error" if ``hostname=""`` (Closes #244)
* No longer hardcode localhost as ``::1`` but perform IPv6 detection first (Closes #244)
1.3.0 (2021-02-09)
==================
Added
-----
* New :meth:`handle_EHLO` interaction where said method can now modify list of responses
to the EHLO command (Closes #155)
Fixed/Improved
--------------
* No longer have to workaround ``bpo-27931`` which has been fixed in Python 3.6 anyways.
* New :meth:`handle_EHLO` interaction where said method can now modify list of responses
to the EHLO command (Closes #155)
* ``authenticator`` system improves on ``auth_callback`` by enabling the called function
to see the SMTP Session and other info.
(``auth_callback`` will be deprecated in 2.0)
* ``__version__`` is now an attribute in ``__init__.py``,
and can be imported from the 'plain' ``aiosmtpd`` module.
(It gets reimported to ``aiosmtpd.smtp``,
so programs relying on ``aiosmtpd.smtp.__version__`` should still work.)
(Closes #241)
* Uses pure ``pytest`` for all test cases (Closes #198)
1.2.4 (2021-01-24)
==================
Added
-----
* Optional (default-disabled) logging of ``AUTH`` interaction -- with severe warnings
Fixed/Improved
--------------
* ``AUTH`` command line now sanitized before logging (Closes #233)
* Remove special handling for lone ``=`` during AUTH;
it is now treated as simple Base64-encoded ``b""``.
This is the correct, strict interpretation of :rfc:`4954` mentions about ``=``
1.2.3 (2021-01-14)
==================
Added
-----
* Test for ``SMTP.__init__`` behavior after taking out code that edits TLS Context
* Implement mechanism to limit the number of commands sent (Closes #145)
Fixed/Improved
--------------
* ``handle_exception()`` no longer gets called when the client disconnected (Closes #127, #162)
* Implement & enforce line-length-limit, thus becoming Compliant with RFC 5321 § 4.5.3.1.6
* Delay all SMTP Status Code replies during ``DATA`` phase until the phase termination (Closes #9)
* Now catches ``Controller.factory()`` failure during ``Controller.start()`` (Closes #212)
* :class:`SMTP` no longer edits user-supplied SSL Context (Closes #191)
* Implement waiting for SSL setup/handshake within ``STARTTLS`` handler to be able to catch and handle
(log) errors and to avoid session hanging around until timeout in such cases
* Add session peer information to some logging output where it was missing
* Support AUTH mechanisms with dash(es) in their names (Closes #224)
* Remove some double-logging of commands sent by clients
* LMTP servers now correctly advertise extensions in reply to ``LHLO`` (Closes #123, #124)
* ``NOOP`` now accepted before ``STARTTLS`` even if ``require_starttls=True`` (Closes #124)
1.2.2 (2020-11-08)
==================
Added
-----
* **Apache License version 2.0**
* Support for SMTP ``AUTH``, with AUTH hooks feature
* Built-in implementation for ``AUTH PLAIN`` and ``AUTH LOGIN`` logic (Closes #102)
* Feature to inject keyword args during server class instantiation in ``Controller.factory``
(potentially Closes #194, #179)
* Support for Python 3.8 and 3.9.0 (also Closes #188)
Fixed/Improved
--------------
* Don't strip last ``\r\n`` prior to terminating dot.
* Slight improvement to make Test Suite more maintainable
* No more failures/DeprecationWarnings for Python 3.8 (Closes #167)
* Faster ``_handle_client()`` processing
* Faster method access for ``smtp_*``, ``handle_*``, and ``auth_*`` hooks
Removed
-------
* Unit Tests that mocked too deep, possibly masking observable internal behaviors
* Drop support for Python 3.5
1.2 (2018-09-01)
================
* 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)
1.1 (2017-07-06)
================
* Drop support for Python 3.4.
* As per RFC 5321, §4.1.4, multiple ``HELO`` / ``EHLO`` commands in the same
session are semantically equivalent to ``RSET``. (Closes #78)
* As per RFC 5321, $4.1.1.9, ``NOOP`` takes 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 ``--version`` / ``-v`` has been added to print the
package's current version number. (Closes #111)
* General improvements in the ``Controller`` class. (Closes #104)
* When aiosmtpd handles a ``STARTTLS`` it 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 ``ConnectionResetError`` and ``CancelledError`` to also
catch such errors from handler methods. (Closes #110)
* Added a manpage for the ``aiosmtpd`` command 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 ``HELP`` responses. This also fixes
``HELP`` responses for the ``LMTP`` subclass. (Closes #113)
* The ``Controller`` class now takes an optional keyword argument
``ssl_context`` which is passed directly to the asyncio ``create_server()``
call.
1.0 (2017-05-15)
================
* Release.
1.0rc1 (2017-05-12)
===================
* Improved documentation.
1.0b1 (2017-05-07)
==================
* The connection peer is displayed in all INFO level logging.
* When running the test suite, you can include a ``-E`` option 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)
* ``Proxy`` handlers work with ``SMTP`` servers regardless of the value of the
``decode_data`` argument.
* The command line script is now installed as ``aiosmtpd`` instead of
``smtpd``.
* The ``SMTP`` class now does a better job of handling Unicode, when the
client does not claim to support ``SMTPUTF8`` but 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
``decode_data=True`` and ``enable_SMTPUTF8=True`` are no longer mutually
exclusive.
* Officially support Windows. (Closes #76)
1.0a5 (2017-04-06)
==================
* 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 ``SMTP.ehlo_hook()`` and ``SMTP.rset_hook()``.
* Deprecate handler ``process_message()`` methods. Use the new asynchronous
``handle_DATA()`` methods, which take a session and an envelope object.
* Added the ``STARTTLS`` extension. Given by Konstantin Volkov.
* Minor changes to the way the ``Debugging`` handler prints ``mail_options``
and ``rcpt_options`` (although the latter is still not support in ``SMTP``).
* ``DATA`` method now respects original line endings, and passing size limits
is now handled better. Given by Konstantin Volkov.
* The ``Controller`` class has two new optional keyword arguments.
- ``ready_timeout`` specifies 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_SMTPUTF8`` is passed through to the ``SMTP`` constructor in the
default factory. If you override ``Controller.factory()`` you can pass
``self.enable_SMTPUTF8`` yourself.
* 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.
* Use ``flufl.testing`` package for nose2 and flake8 plugins.
* The test suite has achieved 100% code coverage. (Closes #2)
1.0a4 (2016-11-29)
==================
* The SMTP server connection identifier can be changed by setting the
``__ident__`` attribute on the ``SMTP`` instance. (Closes #20)
* Fixed a new incompatibility with the ``atpublic`` library.
1.0a3 (2016-11-24)
==================
* Fix typo in ``Message.prepare_message()`` handler. The crafted
``X-RcptTos`` header is renamed to ``X-RcptTo`` for 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 ``EHLO`` sub-responses.
* ``SMTP.rset_hook()`` is called just before the final 250 command to allow
subclasses to provide additional ``RSET`` functionality.
* ``Controller.make_socket()`` allows subclasses to customize the creation
of the socket before binding.
1.0a2 (2016-11-22)
==================
* Officially support Python 3.6.
* Fix support for both IPv4 and IPv6 based on the ``--listen`` option. Given
by Jason Coombs. (Closes #3)
* Correctly handle client disconnects. Given by Konstantin vz'One Enchant.
* The SMTP class now takes an optional ``hostname`` argument. 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 ``AsyncMessage`` handler. Given by Konstantin vz'One Enchant.
* Add an examples/ directory.
* Flake8 clean.
1.0a1 (2015-10-19)
==================
* Initial release.
|