File: NEWS.rst

package info (click to toggle)
python-aiosmtpd 1.4.3-1.1%2Bdeb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,060 kB
  • sloc: python: 7,850; makefile: 158; sh: 5
file content (329 lines) | stat: -rw-r--r-- 12,868 bytes parent folder | download
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.