HEX
Server: LiteSpeed
System: Linux houston.panomity.com 6.8.0-100-generic #100-Ubuntu SMP PREEMPT_DYNAMIC Tue Jan 13 16:40:06 UTC 2026 x86_64
User: nudepix (1011)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //usr/share/doc/python3-aiosmtpd/html/NEWS.html
<!DOCTYPE html>
<html class="writer-html5" lang="en" data-content_root="./">
<head>
  <meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />

  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>NEWS for aiosmtpd &mdash; aiosmtpd 1.4.4.post2 documentation</title>
      <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=fa44fd50" />
      <link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=86f27845" />
      <link rel="stylesheet" type="text/css" href="_static/aiosmtpd.css?v=4cc6bf70" />

  
  
        <script src="_static/jquery.js?v=8dae8fb0"></script>
        <script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
        <script src="_static/documentation_options.js?v=ad49bbf5"></script>
        <script src="_static/doctools.js?v=888ff710"></script>
        <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
    <script src="_static/js/theme.js"></script>
    <link rel="index" title="Index" href="genindex.html" />
    <link rel="search" title="Search" href="search.html" />
    <link rel="prev" title="aiosmtpd" href="manpage.html" /> 
</head>

<body class="wy-body-for-nav"> 
  <div class="wy-grid-for-nav">
    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
      <div class="wy-side-scroll">
        <div class="wy-side-nav-search" >

          
          
          <a href="index.html" class="icon icon-home">
            aiosmtpd
          </a>
              <div class="version">
                1.4.4.post2
              </div>
<div role="search">
  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
    <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
    <input type="hidden" name="check_keywords" value="yes" />
    <input type="hidden" name="area" value="default" />
  </form>
</div>
        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
              <ul class="current">
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="concepts.html">Concepts</a></li>
<li class="toctree-l1"><a class="reference internal" href="cli.html">Command line usage</a></li>
<li class="toctree-l1"><a class="reference internal" href="controller.html">Programmatic usage</a></li>
<li class="toctree-l1"><a class="reference internal" href="smtp.html">The SMTP Module</a></li>
<li class="toctree-l1"><a class="reference internal" href="lmtp.html">The LMTP class</a></li>
<li class="toctree-l1"><a class="reference internal" href="handlers.html">Handlers</a></li>
<li class="toctree-l1"><a class="reference internal" href="auth.html">Authentication System</a></li>
<li class="toctree-l1"><a class="reference internal" href="proxyprotocol.html">PROXY Protocol Support</a></li>
<li class="toctree-l1"><a class="reference internal" href="migrating.html">Migrating from smtpd to aiosmtpd</a></li>
<li class="toctree-l1"><a class="reference internal" href="testing.html">Testing</a></li>
<li class="toctree-l1"><a class="reference internal" href="manpage.html">aiosmtpd</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">NEWS for aiosmtpd</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#aiosmtpd-next">1.5.0 (aiosmtpd-next)</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#added">Added</a></li>
<li class="toctree-l3"><a class="reference internal" href="#fixed-improved">Fixed/Improved</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#post2-2023-01-19">1.4.4.post2 (2023-01-19)</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id1">Fixed/Improved</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#id2">1.4.4 (2023-01-17)</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id3">Fixed/Improved</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#id4">1.4.3 (2022-12-21)</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id5">Fixed/Improved</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#id6">1.4.2 (2021-03-08)</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id7">Fixed/Improved</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#id8">1.4.1 (2021-03-04)</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id9">Fixed/Improved</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#id10">1.4.0 (2021-02-26)</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id11">Added</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id12">Fixed/Improved</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#id13">1.3.2 (2021-02-20)</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id14">Added</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id15">Fixed/Improved</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#id16">1.3.1 (2021-02-18)</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id17">Fixed/Improved</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#id18">1.3.0 (2021-02-09)</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id19">Added</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id20">Fixed/Improved</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#id21">1.2.4 (2021-01-24)</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id22">Added</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id23">Fixed/Improved</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#id24">1.2.3 (2021-01-14)</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id25">Added</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id26">Fixed/Improved</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#id27">1.2.2 (2020-11-08)</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id28">Added</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id29">Fixed/Improved</a></li>
<li class="toctree-l3"><a class="reference internal" href="#removed">Removed</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#id30">1.2 (2018-09-01)</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id31">1.1 (2017-07-06)</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id32">1.0 (2017-05-15)</a></li>
<li class="toctree-l2"><a class="reference internal" href="#rc1-2017-05-12">1.0rc1 (2017-05-12)</a></li>
<li class="toctree-l2"><a class="reference internal" href="#b1-2017-05-07">1.0b1 (2017-05-07)</a></li>
<li class="toctree-l2"><a class="reference internal" href="#a5-2017-04-06">1.0a5 (2017-04-06)</a></li>
<li class="toctree-l2"><a class="reference internal" href="#a4-2016-11-29">1.0a4 (2016-11-29)</a></li>
<li class="toctree-l2"><a class="reference internal" href="#a3-2016-11-24">1.0a3 (2016-11-24)</a></li>
<li class="toctree-l2"><a class="reference internal" href="#a2-2016-11-22">1.0a2 (2016-11-22)</a></li>
<li class="toctree-l2"><a class="reference internal" href="#a1-2015-10-19">1.0a1 (2015-10-19)</a></li>
</ul>
</li>
</ul>

        </div>
      </div>
    </nav>

    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
          <a href="index.html">aiosmtpd</a>
      </nav>

      <div class="wy-nav-content">
        <div class="rst-content">
          <div role="navigation" aria-label="Page navigation">
  <ul class="wy-breadcrumbs">
      <li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
      <li class="breadcrumb-item active">NEWS for aiosmtpd</li>
      <li class="wy-breadcrumbs-aside">
            <a href="_sources/NEWS.rst.txt" rel="nofollow"> View page source</a>
      </li>
  </ul>
  <hr/>
</div>
          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
           <div itemprop="articleBody">
             
  <section id="news-for-aiosmtpd">
<h1>NEWS for aiosmtpd<a class="headerlink" href="#news-for-aiosmtpd" title="Link to this heading"></a></h1>
<section id="aiosmtpd-next">
<h2>1.5.0 (aiosmtpd-next)<a class="headerlink" href="#aiosmtpd-next" title="Link to this heading"></a></h2>
<section id="added">
<h3>Added<a class="headerlink" href="#added" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>Unthreaded Controllers (Closes #160)</p></li>
</ul>
</section>
<section id="fixed-improved">
<h3>Fixed/Improved<a class="headerlink" href="#fixed-improved" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>All Controllers now have more rationale design, as they are now composited from a Base + a Mixin</p></li>
<li><p>A whole bunch of annotations</p></li>
</ul>
</section>
</section>
<section id="post2-2023-01-19">
<h2>1.4.4.post2 (2023-01-19)<a class="headerlink" href="#post2-2023-01-19" title="Link to this heading"></a></h2>
<section id="id1">
<h3>Fixed/Improved<a class="headerlink" href="#id1" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>Prevent unclean repo from being built (Closes #365)</p></li>
<li><p>Reduce chance of not-ready-for-release packages from being uploaded</p></li>
</ul>
</section>
</section>
<section id="id2">
<h2>1.4.4 (2023-01-17)<a class="headerlink" href="#id2" title="Link to this heading"></a></h2>
<section id="id3">
<h3>Fixed/Improved<a class="headerlink" href="#id3" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>No longer expect an implicit creation of the event loop through <code class="docutils literal notranslate"><span class="pre">get_event_loop()</span></code> (Closes #353)</p></li>
</ul>
</section>
</section>
<section id="id4">
<h2>1.4.3 (2022-12-21)<a class="headerlink" href="#id4" title="Link to this heading"></a></h2>
<section id="id5">
<h3>Fixed/Improved<a class="headerlink" href="#id5" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>Is now compatible with uvloop</p></li>
<li><p>Add compatibility for Python 3.10 and 3.11 (Closes #322)</p></li>
<li><p>Test matrix update (Closes #306)</p>
<ul>
<li><p>Drop Python 3.6, PyPy 3.6 (some) and MacOS 10</p></li>
<li><p>Add Python 3.10 &amp; 3.11, PyPy 3.7 &amp; 3.8, Ubuntu 22.04, MacOS 11 &amp; 12</p></li>
</ul>
</li>
<li><p>Expanded tox environments</p></li>
<li><p>Longer AUTOSTOP_DELAY especially for Windows (Closes #313)</p></li>
<li><p>Update signing keys</p></li>
<li><p>Some documentation fixes</p></li>
</ul>
</section>
</section>
<section id="id6">
<h2>1.4.2 (2021-03-08)<a class="headerlink" href="#id6" title="Link to this heading"></a></h2>
<section id="id7">
<h3>Fixed/Improved<a class="headerlink" href="#id7" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>Controller’s <code class="docutils literal notranslate"><span class="pre">ready_timeout</span></code> parameter increased from <code class="docutils literal notranslate"><span class="pre">1.0</span></code> to <code class="docutils literal notranslate"><span class="pre">5.0</span></code>.
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)</p></li>
<li><p>Timeout messages in <code class="docutils literal notranslate"><span class="pre">Controller.start()</span></code> gets more details and a mention about the
<code class="docutils literal notranslate"><span class="pre">ready_timeout</span></code> parameter. (See #262)</p></li>
<li><p>Prevent sensitive AUTH information leak by sanitizing the repr()
of AuthResult and LoginPassword.</p></li>
</ul>
</section>
</section>
<section id="id8">
<h2>1.4.1 (2021-03-04)<a class="headerlink" href="#id8" title="Link to this heading"></a></h2>
<section id="id9">
<h3>Fixed/Improved<a class="headerlink" href="#id9" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>Maximum length of email address local part is customizable, defaults to no limit. (Closes #257)</p></li>
</ul>
</section>
</section>
<section id="id10">
<h2>1.4.0 (2021-02-26)<a class="headerlink" href="#id10" title="Link to this heading"></a></h2>
<section id="id11">
<h3>Added<a class="headerlink" href="#id11" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>Support for <a class="reference external" href="https://www.haproxy.com/blog/using-haproxy-with-the-proxy-protocol-to-better-secure-your-database/"><strong>PROXY Protocol</strong></a> (Closes #174)</p></li>
<li><p>Example for authentication</p></li>
<li><p>SSL Support for CLI. See <a class="reference internal" href="manpage.html#manpage"><span class="std std-ref">the man page</span></a> for more info. (Closes #172)</p></li>
<li><p>New <code class="xref py py-class docutils literal notranslate"><span class="pre">UnixSocketController</span></code> class to implement Unix socket-based SMTP server
(Closes #114)</p></li>
</ul>
</section>
<section id="id12">
<h3>Fixed/Improved<a class="headerlink" href="#id12" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">pypy3</span></code> testenv for tox can now run on Windows</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">static</span></code> testenv now auto-skipped on Windows</p></li>
<li><p>Now uses Sphinx’s Doctest facility, which is much more flexible than pytest’s doctest</p></li>
</ul>
</section>
</section>
<section id="id13">
<h2>1.3.2 (2021-02-20)<a class="headerlink" href="#id13" title="Link to this heading"></a></h2>
<section id="id14">
<h3>Added<a class="headerlink" href="#id14" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>GPG Signing Key info to <code class="docutils literal notranslate"><span class="pre">README.rst</span></code> and PyPI Long Desc</p></li>
<li><p>Hidden <code class="docutils literal notranslate"><span class="pre">static</span></code> test env for static code checking</p></li>
</ul>
</section>
<section id="id15">
<h3>Fixed/Improved<a class="headerlink" href="#id15" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>Fixed Documentation Issues that might cause automatic package builders to fail</p></li>
<li><p>Also consider <code class="docutils literal notranslate"><span class="pre">EAFNOSUPPORT</span></code> in IPv6 detection (Closes #244, again)</p></li>
<li><p>Update PyPI Long Description</p></li>
</ul>
</section>
</section>
<section id="id16">
<h2>1.3.1 (2021-02-18)<a class="headerlink" href="#id16" title="Link to this heading"></a></h2>
<section id="id17">
<h3>Fixed/Improved<a class="headerlink" href="#id17" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">ready_timeout</span></code> now actually enforced, raising <code class="docutils literal notranslate"><span class="pre">TimeoutError</span></code> if breached</p></li>
<li><p>Hides only expected exceptions raised by <code class="docutils literal notranslate"><span class="pre">Controller._testconn()</span></code></p></li>
<li><p>No longer fail with opaque “Unknown Error” if <code class="docutils literal notranslate"><span class="pre">hostname=&quot;&quot;</span></code> (Closes #244)</p></li>
<li><p>No longer hardcode localhost as <code class="docutils literal notranslate"><span class="pre">::1</span></code> but perform IPv6 detection first (Closes #244)</p></li>
</ul>
</section>
</section>
<section id="id18">
<h2>1.3.0 (2021-02-09)<a class="headerlink" href="#id18" title="Link to this heading"></a></h2>
<section id="id19">
<h3>Added<a class="headerlink" href="#id19" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>New <a class="reference internal" href="handlers.html#handle_EHLO" title="handle_EHLO"><code class="xref py py-meth docutils literal notranslate"><span class="pre">handle_EHLO()</span></code></a> interaction where said method can now modify list of responses
to the EHLO command (Closes #155)</p></li>
</ul>
</section>
<section id="id20">
<h3>Fixed/Improved<a class="headerlink" href="#id20" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>No longer have to workaround <code class="docutils literal notranslate"><span class="pre">bpo-27931</span></code> which has been fixed in Python 3.6 anyways.</p></li>
<li><p>New <a class="reference internal" href="handlers.html#handle_EHLO" title="handle_EHLO"><code class="xref py py-meth docutils literal notranslate"><span class="pre">handle_EHLO()</span></code></a> interaction where said method can now modify list of responses
to the EHLO command (Closes #155)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">authenticator</span></code> system improves on <code class="docutils literal notranslate"><span class="pre">auth_callback</span></code> by enabling the called function
to see the SMTP Session and other info.
(<code class="docutils literal notranslate"><span class="pre">auth_callback</span></code> will be deprecated in 2.0)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">__version__</span></code> is now an attribute in <code class="docutils literal notranslate"><span class="pre">__init__.py</span></code>,
and can be imported from the ‘plain’ <code class="docutils literal notranslate"><span class="pre">aiosmtpd</span></code> module.
(It gets reimported to <code class="docutils literal notranslate"><span class="pre">aiosmtpd.smtp</span></code>,
so programs relying on <code class="docutils literal notranslate"><span class="pre">aiosmtpd.smtp.__version__</span></code> should still work.)
(Closes #241)</p></li>
<li><p>Uses pure <code class="docutils literal notranslate"><span class="pre">pytest</span></code> for all test cases (Closes #198)</p></li>
</ul>
</section>
</section>
<section id="id21">
<h2>1.2.4 (2021-01-24)<a class="headerlink" href="#id21" title="Link to this heading"></a></h2>
<section id="id22">
<h3>Added<a class="headerlink" href="#id22" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>Optional (default-disabled) logging of <code class="docutils literal notranslate"><span class="pre">AUTH</span></code> interaction – with severe warnings</p></li>
</ul>
</section>
<section id="id23">
<h3>Fixed/Improved<a class="headerlink" href="#id23" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">AUTH</span></code> command line now sanitized before logging (Closes #233)</p></li>
<li><p>Remove special handling for lone <code class="docutils literal notranslate"><span class="pre">=</span></code> during AUTH;
it is now treated as simple Base64-encoded <code class="docutils literal notranslate"><span class="pre">b&quot;&quot;</span></code>.
This is the correct, strict interpretation of <span class="target" id="index-0"></span><a class="rfc reference external" href="https://datatracker.ietf.org/doc/html/rfc4954.html"><strong>RFC 4954</strong></a> mentions about <code class="docutils literal notranslate"><span class="pre">=</span></code></p></li>
</ul>
</section>
</section>
<section id="id24">
<h2>1.2.3 (2021-01-14)<a class="headerlink" href="#id24" title="Link to this heading"></a></h2>
<section id="id25">
<h3>Added<a class="headerlink" href="#id25" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>Test for <code class="docutils literal notranslate"><span class="pre">SMTP.__init__</span></code> behavior after taking out code that edits TLS Context</p></li>
<li><p>Implement mechanism to limit the number of commands sent (Closes #145)</p></li>
</ul>
</section>
<section id="id26">
<h3>Fixed/Improved<a class="headerlink" href="#id26" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">handle_exception()</span></code> no longer gets called when the client disconnected (Closes #127, #162)</p></li>
<li><p>Implement &amp; enforce line-length-limit, thus becoming Compliant with RFC 5321 § 4.5.3.1.6</p></li>
<li><p>Delay all SMTP Status Code replies during <code class="docutils literal notranslate"><span class="pre">DATA</span></code> phase until the phase termination (Closes #9)</p></li>
<li><p>Now catches <code class="docutils literal notranslate"><span class="pre">Controller.factory()</span></code> failure during <code class="docutils literal notranslate"><span class="pre">Controller.start()</span></code> (Closes #212)</p></li>
<li><p><code class="xref py py-class docutils literal notranslate"><span class="pre">SMTP</span></code> no longer edits user-supplied SSL Context (Closes #191)</p></li>
<li><p>Implement waiting for SSL setup/handshake within <code class="docutils literal notranslate"><span class="pre">STARTTLS</span></code> handler to be able to catch and handle
(log) errors and to avoid session hanging around until timeout in such cases</p></li>
<li><p>Add session peer information to some logging output where it was missing</p></li>
<li><p>Support AUTH mechanisms with dash(es) in their names (Closes #224)</p></li>
<li><p>Remove some double-logging of commands sent by clients</p></li>
<li><p>LMTP servers now correctly advertise extensions in reply to <code class="docutils literal notranslate"><span class="pre">LHLO</span></code> (Closes #123, #124)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">NOOP</span></code> now accepted before <code class="docutils literal notranslate"><span class="pre">STARTTLS</span></code> even if <code class="docutils literal notranslate"><span class="pre">require_starttls=True</span></code> (Closes #124)</p></li>
</ul>
</section>
</section>
<section id="id27">
<h2>1.2.2 (2020-11-08)<a class="headerlink" href="#id27" title="Link to this heading"></a></h2>
<section id="id28">
<h3>Added<a class="headerlink" href="#id28" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p><strong>Apache License version 2.0</strong></p></li>
<li><p>Support for SMTP <code class="docutils literal notranslate"><span class="pre">AUTH</span></code>, with AUTH hooks feature</p></li>
<li><p>Built-in implementation for <code class="docutils literal notranslate"><span class="pre">AUTH</span> <span class="pre">PLAIN</span></code> and <code class="docutils literal notranslate"><span class="pre">AUTH</span> <span class="pre">LOGIN</span></code> logic (Closes #102)</p></li>
<li><p>Feature to inject keyword args during server class instantiation in <code class="docutils literal notranslate"><span class="pre">Controller.factory</span></code>
(potentially Closes #194, #179)</p></li>
<li><p>Support for Python 3.8 and 3.9.0 (also Closes #188)</p></li>
</ul>
</section>
<section id="id29">
<h3>Fixed/Improved<a class="headerlink" href="#id29" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>Don’t strip last <code class="docutils literal notranslate"><span class="pre">\r\n</span></code> prior to terminating dot.</p></li>
<li><p>Slight improvement to make Test Suite more maintainable</p></li>
<li><p>No more failures/DeprecationWarnings for Python 3.8 (Closes #167)</p></li>
<li><p>Faster <code class="docutils literal notranslate"><span class="pre">_handle_client()</span></code> processing</p></li>
<li><p>Faster method access for <code class="docutils literal notranslate"><span class="pre">smtp_*</span></code>, <code class="docutils literal notranslate"><span class="pre">handle_*</span></code>, and <code class="docutils literal notranslate"><span class="pre">auth_*</span></code> hooks</p></li>
</ul>
</section>
<section id="removed">
<h3>Removed<a class="headerlink" href="#removed" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>Unit Tests that mocked too deep, possibly masking observable internal behaviors</p></li>
<li><p>Drop support for Python 3.5</p></li>
</ul>
</section>
</section>
<section id="id30">
<h2>1.2 (2018-09-01)<a class="headerlink" href="#id30" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p>Improve the documentation on enabling <code class="docutils literal notranslate"><span class="pre">STARTTLS</span></code>.  (Closes #125)</p></li>
<li><p>Add customizable ident field to SMTP class constructor. (Closes #131)</p></li>
<li><p>Remove asyncio.coroutine decorator as it was introduced in Python 3.5.</p></li>
<li><p>Add Controller docstring, explain dual-stack binding. (Closes #140)</p></li>
<li><p>Gracefully handle ASCII decoding exceptions. (Closes #142)</p></li>
<li><p>Fix typo.</p></li>
<li><p>Improve Controller ssl_context documentation.</p></li>
<li><p>Add timeout feature. (Partial fix for #145)</p></li>
</ul>
</section>
<section id="id31">
<h2>1.1 (2017-07-06)<a class="headerlink" href="#id31" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p>Drop support for Python 3.4.</p></li>
<li><p>As per RFC 5321, §4.1.4, multiple <code class="docutils literal notranslate"><span class="pre">HELO</span></code> / <code class="docutils literal notranslate"><span class="pre">EHLO</span></code> commands in the same
session are semantically equivalent to <code class="docutils literal notranslate"><span class="pre">RSET</span></code>.  (Closes #78)</p></li>
<li><p>As per RFC 5321, $4.1.1.9, <code class="docutils literal notranslate"><span class="pre">NOOP</span></code> takes an optional argument, which is
ignored.  <strong>API BREAK</strong> If you have a handler that implements
<code class="docutils literal notranslate"><span class="pre">handle_NOOP()</span></code>, it previously took zero arguments but now requires a
single argument.  (Closes #107)</p></li>
<li><p>The command line options <code class="docutils literal notranslate"><span class="pre">--version</span></code> / <code class="docutils literal notranslate"><span class="pre">-v</span></code> has been added to print the
package’s current version number.  (Closes #111)</p></li>
<li><p>General improvements in the <code class="docutils literal notranslate"><span class="pre">Controller</span></code> class.  (Closes #104)</p></li>
<li><p>When aiosmtpd handles a <code class="docutils literal notranslate"><span class="pre">STARTTLS</span></code> 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)</p></li>
<li><p>Widen the catch of <code class="docutils literal notranslate"><span class="pre">ConnectionResetError</span></code> and <code class="docutils literal notranslate"><span class="pre">CancelledError</span></code> to also
catch such errors from handler methods.  (Closes #110)</p></li>
<li><p>Added a manpage for the <code class="docutils literal notranslate"><span class="pre">aiosmtpd</span></code> command line script.  (Closes #116)</p></li>
<li><p>Added much better support for the <code class="docutils literal notranslate"><span class="pre">HELP</span></code>.  There’s a new decorator called
<code class="docutils literal notranslate"><span class="pre">&#64;syntax()</span></code> which you can use in derived classes to decorate <code class="docutils literal notranslate"><span class="pre">smtp_*()</span></code>
methods.  These then show up in <code class="docutils literal notranslate"><span class="pre">HELP</span></code> responses.  This also fixes
<code class="docutils literal notranslate"><span class="pre">HELP</span></code> responses for the <code class="docutils literal notranslate"><span class="pre">LMTP</span></code> subclass.  (Closes #113)</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">Controller</span></code> class now takes an optional keyword argument
<code class="docutils literal notranslate"><span class="pre">ssl_context</span></code> which is passed directly to the asyncio <code class="docutils literal notranslate"><span class="pre">create_server()</span></code>
call.</p></li>
</ul>
</section>
<section id="id32">
<h2>1.0 (2017-05-15)<a class="headerlink" href="#id32" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p>Release.</p></li>
</ul>
</section>
<section id="rc1-2017-05-12">
<h2>1.0rc1 (2017-05-12)<a class="headerlink" href="#rc1-2017-05-12" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p>Improved documentation.</p></li>
</ul>
</section>
<section id="b1-2017-05-07">
<h2>1.0b1 (2017-05-07)<a class="headerlink" href="#b1-2017-05-07" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p>The connection peer is displayed in all INFO level logging.</p></li>
<li><p>When running the test suite, you can include a <code class="docutils literal notranslate"><span class="pre">-E</span></code> option after the
<code class="docutils literal notranslate"><span class="pre">--</span></code> separator to boost the debugging output.</p></li>
<li><p>The main SMTP readline loops are now more robust against connection resets
and mid-read EOFs.  (Closes #62)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">Proxy</span></code> handlers work with <code class="docutils literal notranslate"><span class="pre">SMTP</span></code> servers regardless of the value of the
<code class="docutils literal notranslate"><span class="pre">decode_data</span></code> argument.</p></li>
<li><p>The command line script is now installed as <code class="docutils literal notranslate"><span class="pre">aiosmtpd</span></code> instead of
<code class="docutils literal notranslate"><span class="pre">smtpd</span></code>.</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">SMTP</span></code> class now does a better job of handling Unicode, when the
client does not claim to support <code class="docutils literal notranslate"><span class="pre">SMTPUTF8</span></code> but sends non-ASCII anyway.
The server forces ASCII-only handling when <code class="docutils literal notranslate"><span class="pre">enable_SMTPUTF8=False</span></code> (the
default) is passed to the constructor.  The command line arguments
<code class="docutils literal notranslate"><span class="pre">decode_data=True</span></code> and <code class="docutils literal notranslate"><span class="pre">enable_SMTPUTF8=True</span></code> are no longer mutually
exclusive.</p></li>
<li><p>Officially support Windows.  (Closes #76)</p></li>
</ul>
</section>
<section id="a5-2017-04-06">
<h2>1.0a5 (2017-04-06)<a class="headerlink" href="#a5-2017-04-06" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p>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 <code class="docutils literal notranslate"><span class="pre">SMTP.ehlo_hook()</span></code> and <code class="docutils literal notranslate"><span class="pre">SMTP.rset_hook()</span></code>.</p></li>
<li><p>Deprecate handler <code class="docutils literal notranslate"><span class="pre">process_message()</span></code> methods.  Use the new asynchronous
<code class="docutils literal notranslate"><span class="pre">handle_DATA()</span></code> methods, which take a session and an envelope object.</p></li>
<li><p>Added the <code class="docutils literal notranslate"><span class="pre">STARTTLS</span></code> extension.  Given by Konstantin Volkov.</p></li>
<li><p>Minor changes to the way the <code class="docutils literal notranslate"><span class="pre">Debugging</span></code> handler prints <code class="docutils literal notranslate"><span class="pre">mail_options</span></code>
and <code class="docutils literal notranslate"><span class="pre">rcpt_options</span></code> (although the latter is still not support in <code class="docutils literal notranslate"><span class="pre">SMTP</span></code>).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">DATA</span></code> method now respects original line endings, and passing size limits
is now handled better.  Given by Konstantin Volkov.</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">Controller</span></code> class has two new optional keyword arguments.</p>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">ready_timeout</span></code> 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
<code class="docutils literal notranslate"><span class="pre">AIOSMTPD_CONTROLLER_TIMEOUT</span></code>. (Closes #35)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">enable_SMTPUTF8</span></code> is passed through to the <code class="docutils literal notranslate"><span class="pre">SMTP</span></code> constructor in the
default factory.  If you override <code class="docutils literal notranslate"><span class="pre">Controller.factory()</span></code> you can pass
<code class="docutils literal notranslate"><span class="pre">self.enable_SMTPUTF8</span></code> yourself.</p></li>
</ul>
</li>
<li><p>Handlers can define a <code class="docutils literal notranslate"><span class="pre">handle_tls_handshake()</span></code> method, which takes a
session object, and is called if SSL is enabled during the making of the
connection.  (Closes #48)</p></li>
<li><p>Better Windows compatibility.</p></li>
<li><p>Better Python 3.4 compatibility.</p></li>
<li><p>Use <code class="docutils literal notranslate"><span class="pre">flufl.testing</span></code> package for nose2 and flake8 plugins.</p></li>
<li><p>The test suite has achieved 100% code coverage. (Closes #2)</p></li>
</ul>
</section>
<section id="a4-2016-11-29">
<h2>1.0a4 (2016-11-29)<a class="headerlink" href="#a4-2016-11-29" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p>The SMTP server connection identifier can be changed by setting the
<code class="docutils literal notranslate"><span class="pre">__ident__</span></code> attribute on the <code class="docutils literal notranslate"><span class="pre">SMTP</span></code> instance.  (Closes #20)</p></li>
<li><p>Fixed a new incompatibility with the <code class="docutils literal notranslate"><span class="pre">atpublic</span></code> library.</p></li>
</ul>
</section>
<section id="a3-2016-11-24">
<h2>1.0a3 (2016-11-24)<a class="headerlink" href="#a3-2016-11-24" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p>Fix typo in <code class="docutils literal notranslate"><span class="pre">Message.prepare_message()</span></code> handler.  The crafted
<code class="docutils literal notranslate"><span class="pre">X-RcptTos</span></code> header is renamed to <code class="docutils literal notranslate"><span class="pre">X-RcptTo</span></code> for backward compatibility
with older libraries.</p></li>
<li><p>Add a few hooks to make subclassing easier:</p>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">SMTP.ehlo_hook()</span></code> is called just before the final, non-continuing 250
response to allow subclasses to add additional <code class="docutils literal notranslate"><span class="pre">EHLO</span></code> sub-responses.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">SMTP.rset_hook()</span></code> is called just before the final 250 command to allow
subclasses to provide additional <code class="docutils literal notranslate"><span class="pre">RSET</span></code> functionality.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">Controller.make_socket()</span></code> allows subclasses to customize the creation
of the socket before binding.</p></li>
</ul>
</li>
</ul>
</section>
<section id="a2-2016-11-22">
<h2>1.0a2 (2016-11-22)<a class="headerlink" href="#a2-2016-11-22" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p>Officially support Python 3.6.</p></li>
<li><p>Fix support for both IPv4 and IPv6 based on the <code class="docutils literal notranslate"><span class="pre">--listen</span></code> option.  Given
by Jason Coombs.  (Closes #3)</p></li>
<li><p>Correctly handle client disconnects.  Given by Konstantin vz’One Enchant.</p></li>
<li><p>The SMTP class now takes an optional <code class="docutils literal notranslate"><span class="pre">hostname</span></code> argument.  Use this if you
want to avoid the use of <code class="docutils literal notranslate"><span class="pre">socket.getfqdn()</span></code>.  Given by Konstantin vz’One
Enchant.</p></li>
<li><p>Close the transport and thus the connection on SMTP <code class="docutils literal notranslate"><span class="pre">QUIT</span></code>.  (Closes #11)</p></li>
<li><p>Added an <code class="docutils literal notranslate"><span class="pre">AsyncMessage</span></code> handler.  Given by Konstantin vz’One Enchant.</p></li>
<li><p>Add an examples/ directory.</p></li>
<li><p>Flake8 clean.</p></li>
</ul>
</section>
<section id="a1-2015-10-19">
<h2>1.0a1 (2015-10-19)<a class="headerlink" href="#a1-2015-10-19" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p>Initial release.</p></li>
</ul>
</section>
</section>


           </div>
          </div>
          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
        <a href="manpage.html" class="btn btn-neutral float-left" title="aiosmtpd" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
    </div>

  <hr/>

  <div role="contentinfo">
    <p>&#169; Copyright 2015-2024, The aiosmtpd Developers.</p>
  </div>

  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
    provided by <a href="https://readthedocs.org">Read the Docs</a>.
   

</footer>
        </div>
      </div>
    </section>
  </div>
  <script>
      jQuery(function () {
          SphinxRtdTheme.Navigation.enable(true);
      });
  </script> 

</body>
</html>