/usr/share/doc/python3-aiosmtpd/html/concepts.html is in python3-aiosmtpd 1.1-5.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Concepts — aiosmtpd 1.1 documentation</title>
<link rel="stylesheet" href="../../_static/classic.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../',
VERSION: '1.1',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt'
};
</script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
<link rel="next" title="Command line usage" href="cli.html" />
<link rel="prev" title="Introduction" href="intro.html" />
</head>
<body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="cli.html" title="Command line usage"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="intro.html" title="Introduction"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../../README.html">aiosmtpd 1.1 documentation</a> »</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="concepts">
<h1>Concepts<a class="headerlink" href="#concepts" title="Permalink to this headline">¶</a></h1>
<p>There are two general ways you can run the SMTP server, via the <a class="reference internal" href="../../debian/python3-aiosmtpd/usr/lib/python3.6/dist-packages/aiosmtpd/docs/cli.html#cli"><span class="std std-ref">command
line</span></a> or <a class="reference internal" href="../../debian/python3-aiosmtpd/usr/lib/python3.6/dist-packages/aiosmtpd/docs/controller.html#controller"><span class="std std-ref">programmatically</span></a>.</p>
<p>There are several dimensions in which you can extend the basic functionality
of the SMTP server. You can implement an <em>event handler</em> which uses well
defined <a class="reference internal" href="../../debian/python3-aiosmtpd/usr/lib/python3.6/dist-packages/aiosmtpd/docs/handlers.html#hooks"><span class="std std-ref">handler hooks</span></a> that are called during the various steps
in the SMTP dialog. If such a hook is implemented, it assumes responsibility
for the status messages returned to the client.</p>
<p>You can also <a class="reference internal" href="../../debian/python3-aiosmtpd/usr/lib/python3.6/dist-packages/aiosmtpd/docs/smtp.html#subclass"><span class="std std-ref">subclass</span></a> the core <code class="docutils literal"><span class="pre">SMTP</span></code> class to implement
new commands, or change the semantics of existing commands.</p>
<p>For example, if you wanted to print the received message on the console, you
could implement a handler that hooks into the <code class="docutils literal"><span class="pre">DATA</span></code> command. The contents
of the message will be available on one of the hook’s arguments, and your
handler could print this content to stdout.</p>
<p>On the other hand, if you wanted to implement an SMTP-like server that adds a
new command called <code class="docutils literal"><span class="pre">PING</span></code>, you would do this by subclassing <code class="docutils literal"><span class="pre">SMTP</span></code>, adding
a method that implements whatever semantics for <code class="docutils literal"><span class="pre">PING</span></code> that you want.</p>
<div class="section" id="sessions-and-envelopes">
<span id="id1"></span><h2>Sessions and envelopes<a class="headerlink" href="#sessions-and-envelopes" title="Permalink to this headline">¶</a></h2>
<p>Two classes are used during the SMTP dialog with clients. Instances of these
are passed to the handler hooks.</p>
<div class="section" id="session">
<h3>Session<a class="headerlink" href="#session" title="Permalink to this headline">¶</a></h3>
<p>The session represents the state built up during a client’s socket connection
to the server. Each time a client connects to the server, a new session
object is created.</p>
<dl class="class">
<dt id="Session">
<em class="property">class </em><code class="descname">Session</code><a class="headerlink" href="#Session" title="Permalink to this definition">¶</a></dt>
<dd><dl class="attribute">
<dt id="Session.peer">
<code class="descname">peer</code><a class="headerlink" href="#Session.peer" title="Permalink to this definition">¶</a></dt>
<dd><p>Defaulting to None, this attribute will contain the transport’s socket’s
<a class="reference external" href="https://docs.python.org/3/library/asyncio-protocol.html?highlight=peername#asyncio.BaseTransport.get_extra_info">peername</a> value.</p>
</dd></dl>
<dl class="attribute">
<dt id="Session.ssl">
<code class="descname">ssl</code><a class="headerlink" href="#Session.ssl" title="Permalink to this definition">¶</a></dt>
<dd><p>Defaulting to None, this attribute will contain some extra information,
as a dictionary, from the <code class="docutils literal"><span class="pre">asyncio.sslproto.SSLProtocol</span></code> instance.
This dictionary provides additional information about the connection.
It contains implementation-specific information so its contents may
change, but it should roughly correspond to the information available
through <a class="reference external" href="https://docs.python.org/3/library/asyncio-protocol.html?highlight=get_extra_info#asyncio.BaseTransport.get_extra_info">this method</a>.</p>
</dd></dl>
<dl class="attribute">
<dt id="Session.host_name">
<code class="descname">host_name</code><a class="headerlink" href="#Session.host_name" title="Permalink to this definition">¶</a></dt>
<dd><p>Defaulting to None, this attribute will contain the host name argument
as seen in the <code class="docutils literal"><span class="pre">HELO</span></code> or <code class="docutils literal"><span class="pre">EHLO</span></code> (or for <a class="reference internal" href="../../debian/python3-aiosmtpd/usr/lib/python3.6/dist-packages/aiosmtpd/docs/lmtp.html#lmtp"><span class="std std-ref">LMTP</span></a>, the
<code class="docutils literal"><span class="pre">LHLO</span></code>) command.</p>
</dd></dl>
<dl class="attribute">
<dt id="Session.extended_smtp">
<code class="descname">extended_smtp</code><a class="headerlink" href="#Session.extended_smtp" title="Permalink to this definition">¶</a></dt>
<dd><p>Defaulting to False, this flag will be True when the <code class="docutils literal"><span class="pre">EHLO</span></code> greeting
was seen, indicating <a class="reference external" href="http://www.faqs.org/rfcs/rfc1869.html">ESMTP</a>.</p>
</dd></dl>
<dl class="attribute">
<dt id="Session.loop">
<code class="descname">loop</code><a class="headerlink" href="#Session.loop" title="Permalink to this definition">¶</a></dt>
<dd><p>This is the asyncio event loop instance.</p>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="envelope">
<h3>Envelope<a class="headerlink" href="#envelope" title="Permalink to this headline">¶</a></h3>
<p>The envelope represents state built up during the client’s SMTP dialog. Each
time the protocol state is reset, a new envelope is created. E.g. when the
SMTP <code class="docutils literal"><span class="pre">RSET</span></code> command is sent, the state is reset and a new envelope is
created. A new envelope is also created after the <code class="docutils literal"><span class="pre">DATA</span></code> command is
completed, or in certain error conditions as mandated by <a class="reference external" href="http://www.faqs.org/rfcs/rfc5321.html">RFC 5321</a>.</p>
<dl class="class">
<dt id="Envelope">
<em class="property">class </em><code class="descname">Envelope</code><a class="headerlink" href="#Envelope" title="Permalink to this definition">¶</a></dt>
<dd><dl class="attribute">
<dt id="Envelope.mail_from">
<code class="descname">mail_from</code><a class="headerlink" href="#Envelope.mail_from" title="Permalink to this definition">¶</a></dt>
<dd><p>Defaulting to None, this attribute holds the email address given in the
<code class="docutils literal"><span class="pre">MAIL</span> <span class="pre">FROM</span></code> command.</p>
</dd></dl>
<dl class="attribute">
<dt id="Envelope.mail_options">
<code class="descname">mail_options</code><a class="headerlink" href="#Envelope.mail_options" title="Permalink to this definition">¶</a></dt>
<dd><p>Defaulting to None, this attribute contains a list of any ESMTP mail
options provided by the client, such as those passed in by <a class="reference external" href="https://docs.python.org/3/library/smtplib.html#smtplib.SMTP.sendmail">the smtplib
client</a>.</p>
</dd></dl>
<dl class="attribute">
<dt id="Envelope.content">
<code class="descname">content</code><a class="headerlink" href="#Envelope.content" title="Permalink to this definition">¶</a></dt>
<dd><p>Defaulting to None, this attribute will contain the contents of the
message as provided by the <code class="docutils literal"><span class="pre">DATA</span></code> command. If the <code class="docutils literal"><span class="pre">decode_data</span></code>
parameter to the <code class="docutils literal"><span class="pre">SMTP</span></code> constructor was True, then this attribute will
contain the UTF-8 decoded string, otherwise it will contain the raw
bytes.</p>
</dd></dl>
<dl class="attribute">
<dt id="Envelope.original_content">
<code class="descname">original_content</code><a class="headerlink" href="#Envelope.original_content" title="Permalink to this definition">¶</a></dt>
<dd><p>Defaulting to None, this attribute will contain the contents of the
message as provided by the <code class="docutils literal"><span class="pre">DATA</span></code> command. Unlike the <code class="docutils literal"><span class="pre">content</span></code>
attribute, this attribute will always contain the raw bytes.</p>
</dd></dl>
<dl class="attribute">
<dt id="Envelope.rcpt_tos">
<code class="descname">rcpt_tos</code><a class="headerlink" href="#Envelope.rcpt_tos" title="Permalink to this definition">¶</a></dt>
<dd><p>Defaulting to the empty list, this attribute will contain a list of the
email addresses provided in the <code class="docutils literal"><span class="pre">RCPT</span> <span class="pre">TO</span></code> commands.</p>
</dd></dl>
<dl class="attribute">
<dt id="Envelope.rcpt_options">
<code class="descname">rcpt_options</code><a class="headerlink" href="#Envelope.rcpt_options" title="Permalink to this definition">¶</a></dt>
<dd><p>Defaulting to the empty list, this attribute will contain the list of
any recipient options provided by the client, such as those passed in by
<a class="reference external" href="https://docs.python.org/3/library/smtplib.html#smtplib.SMTP.sendmail">the smtplib client</a>.</p>
</dd></dl>
</dd></dl>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h3><a href="../../README.html">Table Of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">Concepts</a><ul>
<li><a class="reference internal" href="#sessions-and-envelopes">Sessions and envelopes</a><ul>
<li><a class="reference internal" href="#session">Session</a></li>
<li><a class="reference internal" href="#envelope">Envelope</a></li>
</ul>
</li>
</ul>
</li>
</ul>
<h4>Previous topic</h4>
<p class="topless"><a href="intro.html"
title="previous chapter">Introduction</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="cli.html"
title="next chapter">Command line usage</a></p>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="../../_sources/aiosmtpd/docs/concepts.rst.txt"
rel="nofollow">Show Source</a></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3>Quick search</h3>
<form class="search" action="../../search.html" method="get">
<div><input type="text" name="q" /></div>
<div><input type="submit" value="Go" /></div>
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="cli.html" title="Command line usage"
>next</a> |</li>
<li class="right" >
<a href="intro.html" title="Introduction"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../../README.html">aiosmtpd 1.1 documentation</a> »</li>
</ul>
</div>
<div class="footer" role="contentinfo">
© Copyright 2015-2018, aiosmtpd hackers.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.6.
</div>
</body>
</html>
|