NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #3261 most downloaded on PyPI
aiosmtpd - asyncio based SMTP server
Last release 2 years ago
no release in 18 months
Release timing varies
gaps range from 9 days to 2.2 years
Nearly every release is documented
notes for 16 of 17 stable releases
Nothing withdrawn
no release was ever pulled
11 years old
26 releases · first in 2015
STARTTLS is now fully enforced if used.
Fixed incorrect handling of newlines.
Nothing in the library's logic. Just a fix in one of the test cases.
One column per quarter.
Nothing in the library's logic. Just a fix in one of the test cases.
And some changes to prevent same situation from happening again.
Prevent unclean repo from being built (Closes #365)
Reduce chance of not-ready-for-release packages from being uploaded
Nothing published for this version
No longer expect an implicit creation of the event loop through get_event_loop() (Issue #353 )
Changes From 1.4.3
get_event_loop() (Issue #353)No longer expect an implicit creation of the event loop through get_event_loop() (Closes #353)
FIX: Compatibility with CPython 3.10 and 3.11
Changes from 1.4.2:
uvloopUnthreadedControlleraiosmtpd.controller has been rewrittensetup.cfg to prevent potential setuptools problemsIs 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
Mostly introduce testing compatibility with Python 3.10 and Python 3.11
Mostly introduce testing compatibility with Python 3.10 and Python 3.11
Let's try releasing as RC first, if nothing breaks, we will re-release as 1.4.3 without any changes.
Because I've forgotten how to package this thing xD
Because I've forgotten how to package this thing xD
Controller ready_timeout defaults to 5.0
Changes since 1.4.1:
ready_timeout defaults to 5.0TimeoutError during Controller.start()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.
01 Dec 2013
Issue #116 : Correct TypeError when reading a local package index on Python 3.
local_part_limit (max length of email address local part) is now customizable, defaults to 0 (no limit)
Changes from 1.4.0:
local_part_limit (max length of email address local part) is now customizable, defaults to 0 (no limit) (#257)Maximum length of email address local part is customizable, defaults to no limit. (Closes #257)
23 Nov 2013
Issue #114 : Use sys.getfilesystemencoding for decoding config in bdist_wininst distributions.
Issue #105 and Issue #113 : Establish a more robust technique for determining the terminal encoding:
getpreferredencodinggetdefaultlocale. If that encoding was a "fallback" because Python
could not figure it out from the environment or OS, encoding remains
unresolved.On a side note, it would seem that the encoding only matters for when SVN
does not yet support --xml and when getting repository and svn version
numbers. The --xml technique should yield UTF-8 according to some
messages on the SVN mailing lists. So if the version numbers are always
7-bit ASCII clean, it may be best to only support the file parsing methods
for legacy SVN releases and support for SVN without the subprocess command
would simple go away as support for the older SVNs does.
SMTPS/STARTTLS support from CLI
Notable Changes from 1.3.2:
UnixSocketController (#247)Support for PROXY Protocol (Closes #174)
Example for authentication
SSL Support for CLI. See the man page for more info. (Closes #172)
New UnixSocketController class to implement Unix socket-based SMTP server (Closes #114)
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
This is a bugfix release for 1.3.1
This is a bugfix release for 1.3.1
Fixed:
Also:
static to run pytypeGPG Signing Key info to README.rst and PyPI Long Desc
Hidden static test env for static code checking
Fixed Documentation Issues that might cause automatic package builders to fail
Also consider EAFNOSUPPORT in IPv6 detection (Closes #244, again)
Update PyPI Long Description
Smarter localhost determination (fixes #244)
This is a bugfix to 1.3.0
Notable changes:
hostname="" (fixes #244)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)
07 Nov 2013
Remove exuberant warning in SVN support when SVN is not used.
Command Call Limit to stop misbehaving clients
Notable Changes from 1.2.4:
New handle_EHLO interaction where said method can now modify list of responses to the EHLO command (Closes #155)
No longer have to workaround bpo-27931 which has been fixed in Python 3.6 anyways.
New 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)
Now no longer has special handling for lone = sent by client in response to 334
This is a bugfix to 1.2.3
The fixes are:
= sent by client in response to 334Optional (default-disabled) logging of AUTH interaction -- with severe warnings
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 4954 mentions about =
This release introduces a Major Feature: SMTP AUTH with extension support. Two AUTH mechanisms are internally implemented: LOGIN and PLAIN, and the 'h
This release introduces a Major Feature: SMTP AUTH with extension support. Two AUTH mechanisms are internally implemented: LOGIN and PLAIN, and the 'handler' mechanism has been adapted to cater for additional AUTH mechanisms, if needed. More details available in the 'Handlers' documentation page.
In addition, starting 1.2.2 Python 3.5 support has been dropped; minimum required Python version is 3.6 (or its analogue with other implementations such as PyPy).
Other changes:
\r\n prior to terminating dotApache 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)
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
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)
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)
02 Nov 2013
Issue #26 : Add support for SVN 1.7. Special thanks to Philip Thiem for the contribution.
Issue #93 : Wheels are now distributed with every release. Note that as reported in Issue #108 , as of Pip 1.4, scripts aren’t installed properly from wheels. Therefore, if using Pip to install setuptools from a wheel, the easy_install command will not be available.
Setuptools “natural” launcher support, introduced in 1.0, is now officially supported.
As per RFC 5321, §4.1.4, multiple HELO / EHLO commands in the same session are semantically equivalent to RSET. (Closes #78)
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.
26 Aug 2013
Issue #71 ( Distribute #333 ): EasyInstall now puts less emphasis on the condition when a host is blocked via --allow-hosts .
Issue #72 : Restored Python 2.4 compatibility in ez_setup.py .
* Release.
Release.
17 Aug 2013
Issue #60 : On Windows, Setuptools supports deferring to another launcher, such as Vinay Sajip’s pylauncher (included with Python 3.3) to launch console and GUI scripts and not install its own launcher executables. This experimental functionality is currently only enabled if the SETUPTOOLS_LAUNCHER environment variable is set to “natural”. In the future, this behavior may become default, but only after it has matured and seen substantial adoption. The SETUPTOOLS_LAUNCHER also accepts “executable” to force the default behavior of creating launcher executables.
Issue #63 : Bootstrap script (ez_setup.py) now prefers Powershell, curl, or wget for retrieving the Setuptools tarball for improved security of the install. The script will still fall back to a simple urlopen on platforms that do not have these tools.
Issue #65 : Deprecated the Features functionality.
Issue #52 : In VerifyingHTTPSConn , handle a tunnelled (proxied) connection.
This release includes a couple of backward-incompatible changes, but most if not all users will find 1.0 a drop-in replacement for 0.9.
Issue #50 : Normalized API of environment marker support. Specifically, removed line number and filename from SyntaxErrors when returned from pkg_resources.invalid_marker . Any clients depending on the specific string representation of exceptions returned by that function may need to be updated to account for this change.
Issue #50 : SyntaxErrors generated by pkg_resources.invalid_marker are normalized for cross-implementation consistency.
Removed --ignore-conflicts-at-my-risk and --delete-conflicting options to easy_install. These options have been deprecated since 0.6a11.
* Improved documentation.
Improved documentation.
The connection peer is displayed in all INFO level logging.
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)
hooks must return a string status). Deprecate SMTP.ehlo_hook() and SMTP.rset_hook().
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)
The SMTP server connection identifier can be changed by setting the __ident__ attribute on the SMTP instance. (Closes #20)
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.
Fix typo in Message.prepare_message() handler. The crafted X-RcptTos header is renamed to X-RcptTo for backward compatibility with older libraries.
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.
Fix support for both IPv4 and IPv6 based on the --listen option. Given by Jason Coombs. (Closes #3)
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.
* Initial release.
Initial release.
Your coding agent can read these notes before it upgrades. Set up the MCP server →