632 lines
71 KiB
HTML
632 lines
71 KiB
HTML
|
||
<!DOCTYPE html>
|
||
|
||
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh_CN">
|
||
<head>
|
||
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
|
||
|
||
<title>smtplib --- SMTP 协议客户端 — Python 3.8.20 文档</title><meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
|
||
<link rel="stylesheet" href="../_static/pydoctheme.css" type="text/css" />
|
||
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
||
|
||
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
|
||
<script src="../_static/jquery.js"></script>
|
||
<script src="../_static/underscore.js"></script>
|
||
<script src="../_static/doctools.js"></script>
|
||
<script src="../_static/language_data.js"></script>
|
||
<script src="../_static/translations.js"></script>
|
||
|
||
<script src="../_static/sidebar.js"></script>
|
||
|
||
<link rel="search" type="application/opensearchdescription+xml"
|
||
title="在 Python 3.8.20 文档 中搜索"
|
||
href="../_static/opensearch.xml"/>
|
||
<link rel="author" title="关于这些文档" href="../about.html" />
|
||
<link rel="index" title="索引" href="../genindex.html" />
|
||
<link rel="search" title="搜索" href="../search.html" />
|
||
<link rel="copyright" title="版权所有" href="../copyright.html" />
|
||
<link rel="next" title="smtpd --- SMTP 服务器" href="smtpd.html" />
|
||
<link rel="prev" title="nntplib --- NNTP 协议客户端" href="nntplib.html" />
|
||
<link rel="canonical" href="https://docs.python.org/3/library/smtplib.html" />
|
||
|
||
|
||
|
||
|
||
|
||
<style>
|
||
@media only screen {
|
||
table.full-width-table {
|
||
width: 100%;
|
||
}
|
||
}
|
||
</style>
|
||
<link rel="shortcut icon" type="image/png" href="../_static/py.svg" />
|
||
<script type="text/javascript" src="../_static/copybutton.js"></script>
|
||
<script type="text/javascript" src="../_static/menu.js"></script>
|
||
|
||
</head>
|
||
<body>
|
||
<div class="mobile-nav">
|
||
<input type="checkbox" id="menuToggler" class="toggler__input" aria-controls="navigation"
|
||
aria-pressed="false" aria-expanded="false" role="button" aria-label="Menu" />
|
||
<label for="menuToggler" class="toggler__label">
|
||
<span></span>
|
||
</label>
|
||
<nav class="nav-content" role="navigation">
|
||
<a href="https://www.python.org/" class="nav-logo">
|
||
<img src="../_static/py.svg" alt="Logo"/>
|
||
</a>
|
||
<div class="version_switcher_placeholder"></div>
|
||
<form role="search" class="search" action="../search.html" method="get">
|
||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" class="search-icon">
|
||
<path fill-rule="nonzero"
|
||
d="M15.5 14h-.79l-.28-.27a6.5 6.5 0 001.48-5.34c-.47-2.78-2.79-5-5.59-5.34a6.505 6.505 0 00-7.27 7.27c.34 2.8 2.56 5.12 5.34 5.59a6.5 6.5 0 005.34-1.48l.27.28v.79l4.25 4.25c.41.41 1.08.41 1.49 0 .41-.41.41-1.08 0-1.49L15.5 14zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z" fill="#444"></path>
|
||
</svg>
|
||
<input type="text" name="q" aria-label="快速搜索"/>
|
||
<input type="submit" value="转向"/>
|
||
</form>
|
||
</nav>
|
||
<div class="menu-wrapper">
|
||
<nav class="menu" role="navigation" aria-label="main navigation">
|
||
<div class="language_switcher_placeholder"></div>
|
||
<h3><a href="../contents.html">目录</a></h3>
|
||
<ul>
|
||
<li><a class="reference internal" href="#"><code class="xref py py-mod docutils literal notranslate"><span class="pre">smtplib</span></code> --- SMTP 协议客户端</a><ul>
|
||
<li><a class="reference internal" href="#smtp-objects">SMTP 对象</a></li>
|
||
<li><a class="reference internal" href="#smtp-example">SMTP 示例</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
|
||
<h4>上一个主题</h4>
|
||
<p class="topless"><a href="nntplib.html"
|
||
title="上一章"><code class="xref py py-mod docutils literal notranslate"><span class="pre">nntplib</span></code> --- NNTP 协议客户端</a></p>
|
||
<h4>下一个主题</h4>
|
||
<p class="topless"><a href="smtpd.html"
|
||
title="下一章"><code class="xref py py-mod docutils literal notranslate"><span class="pre">smtpd</span></code> --- SMTP 服务器</a></p>
|
||
<div role="note" aria-label="source link">
|
||
<h3>本页</h3>
|
||
<ul class="this-page-menu">
|
||
<li><a href="../bugs.html">报告 Bug</a></li>
|
||
<li>
|
||
<a href="https://github.com/python/cpython/blob/3.8/Doc/library/smtplib.rst"
|
||
rel="nofollow">显示源代码
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</nav>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outdated-warning" style="padding: .5em; text-align: center; background-color: #FFBABA; color: #6A0E0E;">
|
||
这个文档所针对的是一个已不再受支持的 Python 旧版本。
|
||
你应当升级版本,并阅读
|
||
<a href="/3/library/smtplib.html"> Python 当前稳定版本的文档</a>.
|
||
</div>
|
||
|
||
<div class="related" role="navigation" aria-label="related navigation">
|
||
<h3>导航</h3>
|
||
<ul>
|
||
<li class="right" style="margin-right: 10px">
|
||
<a href="../genindex.html" title="总目录"
|
||
accesskey="I">索引</a></li>
|
||
<li class="right" >
|
||
<a href="../py-modindex.html" title="Python 模块索引"
|
||
>模块</a> |</li>
|
||
<li class="right" >
|
||
<a href="smtpd.html" title="smtpd --- SMTP 服务器"
|
||
accesskey="N">下一页</a> |</li>
|
||
<li class="right" >
|
||
<a href="nntplib.html" title="nntplib --- NNTP 协议客户端"
|
||
accesskey="P">上一页</a> |</li>
|
||
|
||
<li><img src="../_static/py.svg" alt="python logo" style="vertical-align: middle; margin-top: -1px"/></li>
|
||
<li><a href="https://www.python.org/">Python</a> »</li>
|
||
<li class="switchers">
|
||
<div class="language_switcher_placeholder"></div>
|
||
<div class="version_switcher_placeholder"></div>
|
||
</li>
|
||
<li>
|
||
|
||
</li>
|
||
<li id="cpython-language-and-version">
|
||
<a href="../index.html">3.8.20 Documentation</a> »
|
||
</li>
|
||
|
||
<li class="nav-item nav-item-1"><a href="index.html" >Python 标准库</a> »</li>
|
||
<li class="nav-item nav-item-2"><a href="internet.html" accesskey="U">互联网协议和支持</a> »</li>
|
||
<li class="right">
|
||
|
||
|
||
<div class="inline-search" role="search">
|
||
<form class="inline-search" action="../search.html" method="get">
|
||
<input placeholder="快速搜索" aria-label="快速搜索" type="text" name="q" />
|
||
<input type="submit" value="转向" />
|
||
<input type="hidden" name="check_keywords" value="yes" />
|
||
<input type="hidden" name="area" value="default" />
|
||
</form>
|
||
</div>
|
||
|
|
||
</li>
|
||
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="document">
|
||
<div class="documentwrapper">
|
||
<div class="bodywrapper">
|
||
<div class="body" role="main">
|
||
|
||
<section id="module-smtplib">
|
||
<span id="smtplib-smtp-protocol-client"></span><h1><a class="reference internal" href="#module-smtplib" title="smtplib: SMTP protocol client (requires sockets)."><code class="xref py py-mod docutils literal notranslate"><span class="pre">smtplib</span></code></a> --- SMTP 协议客户端<a class="headerlink" href="#module-smtplib" title="永久链接至标题">¶</a></h1>
|
||
<p><strong>源代码:</strong> <a class="reference external" href="https://github.com/python/cpython/tree/3.8/Lib/smtplib.py">Lib/smtplib.py</a></p>
|
||
<hr class="docutils" id="index-0" />
|
||
<p><a class="reference internal" href="#module-smtplib" title="smtplib: SMTP protocol client (requires sockets)."><code class="xref py py-mod docutils literal notranslate"><span class="pre">smtplib</span></code></a> 模块定义了一个 SMTP 客户端会话对象,该对象可将邮件发送到 Internet 上带有 SMTP 或 ESMTP 接收程序的计算机。 关于 SMTP 和 ESMTP 操作的详情请参阅 <span class="target" id="index-25"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc821.html"><strong>RFC 821</strong></a> (简单邮件传输协议) 和 <span class="target" id="index-26"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc1869.html"><strong>RFC 1869</strong></a> (SMTP 服务扩展)。</p>
|
||
<dl class="class">
|
||
<dt id="smtplib.SMTP">
|
||
<em class="property">class </em><code class="sig-prename descclassname">smtplib.</code><code class="sig-name descname">SMTP</code><span class="sig-paren">(</span><em class="sig-param">host=''</em>, <em class="sig-param">port=0</em>, <em class="sig-param">local_hostname=None</em>, <span class="optional">[</span><em class="sig-param">timeout</em>, <span class="optional">]</span><em class="sig-param">source_address=None</em><span class="sig-paren">)</span><a class="headerlink" href="#smtplib.SMTP" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>一个 <a class="reference internal" href="#smtplib.SMTP" title="smtplib.SMTP"><code class="xref py py-class docutils literal notranslate"><span class="pre">SMTP</span></code></a> 实例就是一个封装好的 SMTP 连接。该实例具有的方法支持所有 SMTP 和 ESMTP 操作。如果传入了可选参数 host 和 port,那么将在初始化时使用这些参数调用 SMTP <a class="reference internal" href="#smtplib.SMTP.connect" title="smtplib.SMTP.connect"><code class="xref py py-meth docutils literal notranslate"><span class="pre">connect()</span></code></a> 方法。如果传入了 <em>local_hostname</em>,它将在 HELO/EHLO 命令中被用作本地主机的 FQDN。否则将使用 <a class="reference internal" href="socket.html#socket.getfqdn" title="socket.getfqdn"><code class="xref py py-func docutils literal notranslate"><span class="pre">socket.getfqdn()</span></code></a> 找到本地主机名。如果 <a class="reference internal" href="#smtplib.SMTP.connect" title="smtplib.SMTP.connect"><code class="xref py py-meth docutils literal notranslate"><span class="pre">connect()</span></code></a> 返回了成功码以外的内容,则引发 <a class="reference internal" href="#smtplib.SMTPConnectError" title="smtplib.SMTPConnectError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">SMTPConnectError</span></code></a> 异常。可选参数 <em>timeout</em> 指定阻塞操作(如连接尝试)的超时(以秒为单位,如果未指定超时,将使用全局默认超时设置)。到达超时时长后会引发 <a class="reference internal" href="socket.html#socket.timeout" title="socket.timeout"><code class="xref py py-exc docutils literal notranslate"><span class="pre">socket.timeout</span></code></a> 异常。可选参数 source_address 允许在有多张网卡的计算机中绑定到某些特定的源地址,和/或绑定到某些特定的源 TCP 端口。在连接前,套接字需要绑定一个 2 元组 (host, port) 作为其源地址。如果省略,或者是主机为 <code class="docutils literal notranslate"><span class="pre">''</span></code> 和/或端口为 0,则将使用操作系统默认行为。</p>
|
||
<p>正常使用时,只需要初始化或 connect 方法,<a class="reference internal" href="#smtplib.SMTP.sendmail" title="smtplib.SMTP.sendmail"><code class="xref py py-meth docutils literal notranslate"><span class="pre">sendmail()</span></code></a> 方法,再加上 <a class="reference internal" href="#smtplib.SMTP.quit" title="smtplib.SMTP.quit"><code class="xref py py-meth docutils literal notranslate"><span class="pre">SMTP.quit()</span></code></a> 方法即可。下文包括了一个示例。</p>
|
||
<p><a class="reference internal" href="#smtplib.SMTP" title="smtplib.SMTP"><code class="xref py py-class docutils literal notranslate"><span class="pre">SMTP</span></code></a> 类支持 <a class="reference internal" href="../reference/compound_stmts.html#with"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">with</span></code></a> 语句。当这样使用时,<code class="xref std std-keyword docutils literal notranslate"><span class="pre">with</span></code> 语句一退出就会自动发出 SMTP <code class="docutils literal notranslate"><span class="pre">QUIT</span></code> 命令。例如:</p>
|
||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">smtplib</span> <span class="kn">import</span> <span class="n">SMTP</span>
|
||
<span class="gp">>>> </span><span class="k">with</span> <span class="n">SMTP</span><span class="p">(</span><span class="s2">"domain.org"</span><span class="p">)</span> <span class="k">as</span> <span class="n">smtp</span><span class="p">:</span>
|
||
<span class="gp">... </span> <span class="n">smtp</span><span class="o">.</span><span class="n">noop</span><span class="p">()</span>
|
||
<span class="gp">...</span>
|
||
<span class="go">(250, b'Ok')</span>
|
||
<span class="gp">>>></span>
|
||
</pre></div>
|
||
</div>
|
||
<p class="audit-hook">引发一个 <a class="reference internal" href="sys.html#auditing"><span class="std std-ref">审计事件</span></a> <code class="docutils literal notranslate"><span class="pre">smtplib.send</span></code>,附带参数 <code class="docutils literal notranslate"><span class="pre">self</span></code>, <code class="docutils literal notranslate"><span class="pre">data</span></code>。</p>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">在 3.3 版更改: </span>添加了对 <a class="reference internal" href="../reference/compound_stmts.html#with"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">with</span></code></a> 语句的支持。</p>
|
||
</div>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">在 3.3 版更改: </span>添加了 source_address 参数。</p>
|
||
</div>
|
||
<div class="versionadded">
|
||
<p><span class="versionmodified added">3.5 新版功能: </span>现在已支持 SMTPUTF8 扩展 (<span class="target" id="index-27"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc6531.html"><strong>RFC 6531</strong></a>)。</p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="class">
|
||
<dt id="smtplib.SMTP_SSL">
|
||
<em class="property">class </em><code class="sig-prename descclassname">smtplib.</code><code class="sig-name descname">SMTP_SSL</code><span class="sig-paren">(</span><em class="sig-param">host=''</em>, <em class="sig-param">port=0</em>, <em class="sig-param">local_hostname=None</em>, <em class="sig-param">keyfile=None</em>, <em class="sig-param">certfile=None</em>, <span class="optional">[</span><em class="sig-param">timeout</em>, <span class="optional">]</span><em class="sig-param">context=None</em>, <em class="sig-param">source_address=None</em><span class="sig-paren">)</span><a class="headerlink" href="#smtplib.SMTP_SSL" title="永久链接至目标">¶</a></dt>
|
||
<dd><p><a class="reference internal" href="#smtplib.SMTP_SSL" title="smtplib.SMTP_SSL"><code class="xref py py-class docutils literal notranslate"><span class="pre">SMTP_SSL</span></code></a> 实例与 <a class="reference internal" href="#smtplib.SMTP" title="smtplib.SMTP"><code class="xref py py-class docutils literal notranslate"><span class="pre">SMTP</span></code></a> 实例的行为完全相同。在开始连接就需要 SSL,且 <code class="xref py py-meth docutils literal notranslate"><span class="pre">starttls()</span></code> 不适合的情况下,应该使用 <a class="reference internal" href="#smtplib.SMTP_SSL" title="smtplib.SMTP_SSL"><code class="xref py py-class docutils literal notranslate"><span class="pre">SMTP_SSL</span></code></a>。如果未指定 <em>host</em>,则使用 localhost。如果 <em>port</em> 为 0,则使用标准 SMTP-over-SSL 端口(465)。可选参数 <em>local_hostname</em>、<em>timeout</em> 和 <em>source_address</em> 的含义与 <a class="reference internal" href="#smtplib.SMTP" title="smtplib.SMTP"><code class="xref py py-class docutils literal notranslate"><span class="pre">SMTP</span></code></a> 类中的相同。可选参数 <em>context</em> 是一个 <a class="reference internal" href="ssl.html#ssl.SSLContext" title="ssl.SSLContext"><code class="xref py py-class docutils literal notranslate"><span class="pre">SSLContext</span></code></a> 对象,可以从多个方面配置安全连接。请阅读 <a class="reference internal" href="ssl.html#ssl-security"><span class="std std-ref">安全考量</span></a> 以获取最佳实践。</p>
|
||
<p><em>keyfile</em> 和 <em>certfile</em> 是 <em>context</em> 的传统替代物,它们可以指向 PEM 格式的私钥和证书链文件用于 SSL 连接。</p>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">在 3.3 版更改: </span>增加了 <em>context</em>。</p>
|
||
</div>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">在 3.3 版更改: </span>添加了 source_address 参数。</p>
|
||
</div>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">在 3.4 版更改: </span>本类现在支持使用 <a class="reference internal" href="ssl.html#ssl.SSLContext.check_hostname" title="ssl.SSLContext.check_hostname"><code class="xref py py-attr docutils literal notranslate"><span class="pre">ssl.SSLContext.check_hostname</span></code></a> 和 <em>服务器名称指示</em> (参阅 <a class="reference internal" href="ssl.html#ssl.HAS_SNI" title="ssl.HAS_SNI"><code class="xref py py-data docutils literal notranslate"><span class="pre">ssl.HAS_SNI</span></code></a>)进行主机名检查。</p>
|
||
</div>
|
||
<div class="deprecated">
|
||
<p><span class="versionmodified deprecated">3.6 版后已移除: </span><em>keyfile</em> 和 <em>certfile</em> 已弃用并转而推荐 <em>context</em>。 请改用 <a class="reference internal" href="ssl.html#ssl.SSLContext.load_cert_chain" title="ssl.SSLContext.load_cert_chain"><code class="xref py py-meth docutils literal notranslate"><span class="pre">ssl.SSLContext.load_cert_chain()</span></code></a> 或让 <a class="reference internal" href="ssl.html#ssl.create_default_context" title="ssl.create_default_context"><code class="xref py py-func docutils literal notranslate"><span class="pre">ssl.create_default_context()</span></code></a> 为你选择系统所信任的 CA 证书。</p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="class">
|
||
<dt id="smtplib.LMTP">
|
||
<em class="property">class </em><code class="sig-prename descclassname">smtplib.</code><code class="sig-name descname">LMTP</code><span class="sig-paren">(</span><em class="sig-param">host=''</em>, <em class="sig-param">port=LMTP_PORT</em>, <em class="sig-param">local_hostname=None</em>, <em class="sig-param">source_address=None</em><span class="sig-paren">)</span><a class="headerlink" href="#smtplib.LMTP" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>LMTP 协议与 ESMTP 非常相似,它很大程度上基于标准的 SMTP 客户端。将 Unix 套接字用于 LMTP 是很常见的,因此 <code class="xref py py-meth docutils literal notranslate"><span class="pre">connect()</span></code> 方法支持 Unix 套接字,也支持常规的 host:port 服务器。可选参数 local_hostname 和 source_address 的含义与 <a class="reference internal" href="#smtplib.SMTP" title="smtplib.SMTP"><code class="xref py py-class docutils literal notranslate"><span class="pre">SMTP</span></code></a> 类中的相同。要指定 Unix 套接字,<em>host</em> 必须使用绝对路径,以 '/' 开头。</p>
|
||
<p>支持使用常规的 SMTP 机制来进行认证。 当使用 Unix 套接字时,LMTP 通常不支持或要求任何认证,但你的情况可能会有所不同。</p>
|
||
</dd></dl>
|
||
|
||
<p>同样地定义了一组精心选择的异常:</p>
|
||
<dl class="exception">
|
||
<dt id="smtplib.SMTPException">
|
||
<em class="property">exception </em><code class="sig-prename descclassname">smtplib.</code><code class="sig-name descname">SMTPException</code><a class="headerlink" href="#smtplib.SMTPException" title="永久链接至目标">¶</a></dt>
|
||
<dd><p><a class="reference internal" href="exceptions.html#OSError" title="OSError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">OSError</span></code></a> 的子类,它是本模块提供的所有其他异常的基类。</p>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">在 3.4 版更改: </span>SMTPException 已成为 <a class="reference internal" href="exceptions.html#OSError" title="OSError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">OSError</span></code></a> 的子类</p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="exception">
|
||
<dt id="smtplib.SMTPServerDisconnected">
|
||
<em class="property">exception </em><code class="sig-prename descclassname">smtplib.</code><code class="sig-name descname">SMTPServerDisconnected</code><a class="headerlink" href="#smtplib.SMTPServerDisconnected" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>当服务器意外断开连接,或在 <a class="reference internal" href="#smtplib.SMTP" title="smtplib.SMTP"><code class="xref py py-class docutils literal notranslate"><span class="pre">SMTP</span></code></a> 实例连接到服务器之前尝试使用它时将引发此异常。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="exception">
|
||
<dt id="smtplib.SMTPResponseException">
|
||
<em class="property">exception </em><code class="sig-prename descclassname">smtplib.</code><code class="sig-name descname">SMTPResponseException</code><a class="headerlink" href="#smtplib.SMTPResponseException" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>包括 SMTP 错误代码的所有异常的基类。 这些异常会在 SMTP 服务器返回错误代码时在实例中生成。 错误代码存放在错误的 <code class="xref py py-attr docutils literal notranslate"><span class="pre">smtp_code</span></code> 属性中,并且 <code class="xref py py-attr docutils literal notranslate"><span class="pre">smtp_error</span></code> 属性会被设为错误消息。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="exception">
|
||
<dt id="smtplib.SMTPSenderRefused">
|
||
<em class="property">exception </em><code class="sig-prename descclassname">smtplib.</code><code class="sig-name descname">SMTPSenderRefused</code><a class="headerlink" href="#smtplib.SMTPSenderRefused" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>发送方地址被拒绝。 除了在所有 <a class="reference internal" href="#smtplib.SMTPResponseException" title="smtplib.SMTPResponseException"><code class="xref py py-exc docutils literal notranslate"><span class="pre">SMTPResponseException</span></code></a> 异常上设置的属性,还会将 'sender' 设为代表拒绝方 SMTP 服务器的字符串。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="exception">
|
||
<dt id="smtplib.SMTPRecipientsRefused">
|
||
<em class="property">exception </em><code class="sig-prename descclassname">smtplib.</code><code class="sig-name descname">SMTPRecipientsRefused</code><a class="headerlink" href="#smtplib.SMTPRecipientsRefused" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>所有接收方地址被拒绝。 每个接收方的错误可通过属性 <code class="xref py py-attr docutils literal notranslate"><span class="pre">recipients</span></code> 来访问,该属性是一个字典,其元素顺序与 <a class="reference internal" href="#smtplib.SMTP.sendmail" title="smtplib.SMTP.sendmail"><code class="xref py py-meth docutils literal notranslate"><span class="pre">SMTP.sendmail()</span></code></a> 所返回的一致。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="exception">
|
||
<dt id="smtplib.SMTPDataError">
|
||
<em class="property">exception </em><code class="sig-prename descclassname">smtplib.</code><code class="sig-name descname">SMTPDataError</code><a class="headerlink" href="#smtplib.SMTPDataError" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>SMTP 服务器拒绝接收消息数据。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="exception">
|
||
<dt id="smtplib.SMTPConnectError">
|
||
<em class="property">exception </em><code class="sig-prename descclassname">smtplib.</code><code class="sig-name descname">SMTPConnectError</code><a class="headerlink" href="#smtplib.SMTPConnectError" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>在建立与服务器的连接期间发生了错误。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="exception">
|
||
<dt id="smtplib.SMTPHeloError">
|
||
<em class="property">exception </em><code class="sig-prename descclassname">smtplib.</code><code class="sig-name descname">SMTPHeloError</code><a class="headerlink" href="#smtplib.SMTPHeloError" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>服务器拒绝了我们的 <code class="docutils literal notranslate"><span class="pre">HELO</span></code> 消息。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="exception">
|
||
<dt id="smtplib.SMTPNotSupportedError">
|
||
<em class="property">exception </em><code class="sig-prename descclassname">smtplib.</code><code class="sig-name descname">SMTPNotSupportedError</code><a class="headerlink" href="#smtplib.SMTPNotSupportedError" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>尝试的命令或选项不被服务器所支持。</p>
|
||
<div class="versionadded">
|
||
<p><span class="versionmodified added">3.5 新版功能.</span></p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="exception">
|
||
<dt id="smtplib.SMTPAuthenticationError">
|
||
<em class="property">exception </em><code class="sig-prename descclassname">smtplib.</code><code class="sig-name descname">SMTPAuthenticationError</code><a class="headerlink" href="#smtplib.SMTPAuthenticationError" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>SMTP 认证出现问题。 最大的可能是服务器不接受所提供的用户名/密码组合。</p>
|
||
</dd></dl>
|
||
|
||
<div class="admonition seealso">
|
||
<p class="admonition-title">参见</p>
|
||
<dl class="simple">
|
||
<dt><span class="target" id="index-28"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc821.html"><strong>RFC 821</strong></a> - 简单邮件传输协议</dt><dd><p>SMTP 的协议定义。 该文件涵盖了 SMTP 的模型、操作程序和协议细节。</p>
|
||
</dd>
|
||
<dt><span class="target" id="index-29"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc1869.html"><strong>RFC 1869</strong></a> - SMTP 服务扩展</dt><dd><p>定义了 SMTP 的 ESMTP 扩展。 这描述了一个用新命令扩展 SMTP 的框架,支持动态发现服务器所提供的命令,并定义了一些额外的命令。</p>
|
||
</dd>
|
||
</dl>
|
||
</div>
|
||
<section id="smtp-objects">
|
||
<span id="id1"></span><h2>SMTP 对象<a class="headerlink" href="#smtp-objects" title="永久链接至标题">¶</a></h2>
|
||
<p>一个 <a class="reference internal" href="#smtplib.SMTP" title="smtplib.SMTP"><code class="xref py py-class docutils literal notranslate"><span class="pre">SMTP</span></code></a> 实例拥有以下方法:</p>
|
||
<dl class="method">
|
||
<dt id="smtplib.SMTP.set_debuglevel">
|
||
<code class="sig-prename descclassname">SMTP.</code><code class="sig-name descname">set_debuglevel</code><span class="sig-paren">(</span><em class="sig-param">level</em><span class="sig-paren">)</span><a class="headerlink" href="#smtplib.SMTP.set_debuglevel" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>设置调试输出级别。 如果 <em>level</em> 的值为 1 或 <code class="docutils literal notranslate"><span class="pre">True</span></code> ,就会产生连接的调试信息,以及所有发送和接收服务器的信息。 如果 <em>level</em> 的值为 2 ,则这些信息会被加上时间戳。</p>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">在 3.5 版更改: </span>添调试级别 2 。</p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="smtplib.SMTP.docmd">
|
||
<code class="sig-prename descclassname">SMTP.</code><code class="sig-name descname">docmd</code><span class="sig-paren">(</span><em class="sig-param">cmd</em>, <em class="sig-param">args=''</em><span class="sig-paren">)</span><a class="headerlink" href="#smtplib.SMTP.docmd" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>向服务器发送一条命令 <em>cmd</em> 。 可选的参数 <em>args</em> 被简单地串联到命令中,用一个空格隔开。</p>
|
||
<p>这将返回一个由数字响应代码和实际响应行组成的2元组(多行响应被连接成一个长行)。</p>
|
||
<p>在正常操作中,应该没有必要明确地调用这个方法。它被用来实现其他方法,对于测试私有扩展可能很有用。</p>
|
||
<p>如果在等待回复的过程中,与服务器的连接丢失, <a class="reference internal" href="#smtplib.SMTPServerDisconnected" title="smtplib.SMTPServerDisconnected"><code class="xref py py-exc docutils literal notranslate"><span class="pre">SMTPServerDisconnected</span></code></a> 将被触发。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="smtplib.SMTP.connect">
|
||
<code class="sig-prename descclassname">SMTP.</code><code class="sig-name descname">connect</code><span class="sig-paren">(</span><em class="sig-param">host='localhost'</em>, <em class="sig-param">port=0</em><span class="sig-paren">)</span><a class="headerlink" href="#smtplib.SMTP.connect" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>连接到某个主机的某个端口。默认是连接到 localhost 的标准 SMTP 端口(25)上。如果主机名以冒号 (<code class="docutils literal notranslate"><span class="pre">':'</span></code>) 结尾,后跟数字,则该后缀将被删除,且数字将视作要使用的端口号。如果在实例化时指定了 host,则构造函数会自动调用本方法。返回包含响应码和响应消息的 2 元组,它们由服务器在其连接响应中发送。</p>
|
||
<p class="audit-hook">引发一个 <a class="reference internal" href="sys.html#auditing"><span class="std std-ref">审计事件</span></a> <code class="docutils literal notranslate"><span class="pre">smtplib.connect</span></code> 并附带参数 <code class="docutils literal notranslate"><span class="pre">self</span></code>, <code class="docutils literal notranslate"><span class="pre">host</span></code>, <code class="docutils literal notranslate"><span class="pre">port</span></code>。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="smtplib.SMTP.helo">
|
||
<code class="sig-prename descclassname">SMTP.</code><code class="sig-name descname">helo</code><span class="sig-paren">(</span><em class="sig-param">name=''</em><span class="sig-paren">)</span><a class="headerlink" href="#smtplib.SMTP.helo" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>使用 <code class="docutils literal notranslate"><span class="pre">HELO</span></code> 向 SMTP 服务器表明自己的身份。 hostname 参数默认为本地主机的完全合格域名。服务器返回的消息被存储为对象的 <code class="xref py py-attr docutils literal notranslate"><span class="pre">helo_resp</span></code> 属性。</p>
|
||
<p>在正常操作中,应该没有必要明确调用这个方法。它将在必要时被 <a class="reference internal" href="#smtplib.SMTP.sendmail" title="smtplib.SMTP.sendmail"><code class="xref py py-meth docutils literal notranslate"><span class="pre">sendmail()</span></code></a> 隐式调用。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="smtplib.SMTP.ehlo">
|
||
<code class="sig-prename descclassname">SMTP.</code><code class="sig-name descname">ehlo</code><span class="sig-paren">(</span><em class="sig-param">name=''</em><span class="sig-paren">)</span><a class="headerlink" href="#smtplib.SMTP.ehlo" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>使用 <code class="docutils literal notranslate"><span class="pre">EHLO</span></code> 向 ESMTP 服务器标识自身。hostname 参数默认为 localhost 的标准域名。使用 <a class="reference internal" href="#smtplib.SMTP.has_extn" title="smtplib.SMTP.has_extn"><code class="xref py py-meth docutils literal notranslate"><span class="pre">has_extn()</span></code></a> 来检查响应中的 ESMTP 选项,并将它们保存起来。还给一些信息性的属性赋值:服务器返回的消息存储为 <code class="xref py py-attr docutils literal notranslate"><span class="pre">ehlo_resp</span></code> 属性;根据服务器是否支持 ESMTP,将 <code class="xref py py-attr docutils literal notranslate"><span class="pre">does_esmtp</span></code> 设置为 true 或 false;而 <code class="xref py py-attr docutils literal notranslate"><span class="pre">esmtp_features</span></code> 是一个字典,包含该服务器支持的 SMTP 服务扩展的名称及参数(如果有参数)。</p>
|
||
<p>除非你想在发送邮件前使用 <a class="reference internal" href="#smtplib.SMTP.has_extn" title="smtplib.SMTP.has_extn"><code class="xref py py-meth docutils literal notranslate"><span class="pre">has_extn()</span></code></a> ,否则应该没有必要明确调用这个方法。 它将在必要时被 <a class="reference internal" href="#smtplib.SMTP.sendmail" title="smtplib.SMTP.sendmail"><code class="xref py py-meth docutils literal notranslate"><span class="pre">sendmail()</span></code></a> 隐式调用。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="smtplib.SMTP.ehlo_or_helo_if_needed">
|
||
<code class="sig-prename descclassname">SMTP.</code><code class="sig-name descname">ehlo_or_helo_if_needed</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#smtplib.SMTP.ehlo_or_helo_if_needed" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>如果这个会话中没有先前的 <code class="docutils literal notranslate"><span class="pre">EHLO</span></code> 或 <code class="docutils literal notranslate"><span class="pre">HELO</span></code> 命令,该方法会调用 <a class="reference internal" href="#smtplib.SMTP.ehlo" title="smtplib.SMTP.ehlo"><code class="xref py py-meth docutils literal notranslate"><span class="pre">ehlo()</span></code></a> 和/或 <a class="reference internal" href="#smtplib.SMTP.helo" title="smtplib.SMTP.helo"><code class="xref py py-meth docutils literal notranslate"><span class="pre">helo()</span></code></a> 。它首先尝试 ESMTP <code class="docutils literal notranslate"><span class="pre">EHLO</span></code> 。</p>
|
||
<dl class="simple">
|
||
<dt><a class="reference internal" href="#smtplib.SMTPHeloError" title="smtplib.SMTPHeloError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">SMTPHeloError</span></code></a></dt><dd><p>服务器没有正确回复 <code class="docutils literal notranslate"><span class="pre">HELO</span></code> 问候。</p>
|
||
</dd>
|
||
</dl>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="smtplib.SMTP.has_extn">
|
||
<code class="sig-prename descclassname">SMTP.</code><code class="sig-name descname">has_extn</code><span class="sig-paren">(</span><em class="sig-param">name</em><span class="sig-paren">)</span><a class="headerlink" href="#smtplib.SMTP.has_extn" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>如果 <em>name</em> 在服务器返回的 SMTP 服务扩展集合中,返回 <a class="reference internal" href="constants.html#True" title="True"><code class="xref py py-const docutils literal notranslate"><span class="pre">True</span></code></a> ,否则为 <a class="reference internal" href="constants.html#False" title="False"><code class="xref py py-const docutils literal notranslate"><span class="pre">False</span></code></a> 。大小写被忽略。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="smtplib.SMTP.verify">
|
||
<code class="sig-prename descclassname">SMTP.</code><code class="sig-name descname">verify</code><span class="sig-paren">(</span><em class="sig-param">address</em><span class="sig-paren">)</span><a class="headerlink" href="#smtplib.SMTP.verify" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>使用 SMTP <code class="docutils literal notranslate"><span class="pre">VRFY</span></code> 检查此服务器上的某个地址是否有效。 如果用户地址有效则返回一个由代码 250 和完整 <span class="target" id="index-30"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc822.html"><strong>RFC 822</strong></a> 地址(包括人名)组成的元组。 否则返回 400 或更大的 SMTP 错误代码以及一个错误字符串。</p>
|
||
<div class="admonition note">
|
||
<p class="admonition-title">注解</p>
|
||
<p>许多网站都禁用 SMTP <code class="docutils literal notranslate"><span class="pre">VRFY</span></code> 以阻止垃圾邮件。</p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="smtplib.SMTP.login">
|
||
<code class="sig-prename descclassname">SMTP.</code><code class="sig-name descname">login</code><span class="sig-paren">(</span><em class="sig-param">user</em>, <em class="sig-param">password</em>, <em class="sig-param">*</em>, <em class="sig-param">initial_response_ok=True</em><span class="sig-paren">)</span><a class="headerlink" href="#smtplib.SMTP.login" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>登录到一个需要认证的 SMTP 服务器。 参数是用于认证的用户名和密码。 如果会话在之前没有执行过 <code class="docutils literal notranslate"><span class="pre">EHLO</span></code> 或 <code class="docutils literal notranslate"><span class="pre">HELO</span></code> 命令,此方法会先尝试 ESMTP <code class="docutils literal notranslate"><span class="pre">EHLO</span></code>。 如果认证成功则此方法将正常返回,否则可能引发以下异常:</p>
|
||
<dl class="simple">
|
||
<dt><a class="reference internal" href="#smtplib.SMTPHeloError" title="smtplib.SMTPHeloError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">SMTPHeloError</span></code></a></dt><dd><p>服务器没有正确回复 <code class="docutils literal notranslate"><span class="pre">HELO</span></code> 问候。</p>
|
||
</dd>
|
||
<dt><a class="reference internal" href="#smtplib.SMTPAuthenticationError" title="smtplib.SMTPAuthenticationError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">SMTPAuthenticationError</span></code></a></dt><dd><p>服务器不接受所提供的用户名/密码组合。</p>
|
||
</dd>
|
||
<dt><a class="reference internal" href="#smtplib.SMTPNotSupportedError" title="smtplib.SMTPNotSupportedError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">SMTPNotSupportedError</span></code></a></dt><dd><p>服务器不支持 <code class="docutils literal notranslate"><span class="pre">AUTH</span></code> 命令。</p>
|
||
</dd>
|
||
<dt><a class="reference internal" href="#smtplib.SMTPException" title="smtplib.SMTPException"><code class="xref py py-exc docutils literal notranslate"><span class="pre">SMTPException</span></code></a></dt><dd><p>未找到适当的认证方法。</p>
|
||
</dd>
|
||
</dl>
|
||
<p><a class="reference internal" href="#module-smtplib" title="smtplib: SMTP protocol client (requires sockets)."><code class="xref py py-mod docutils literal notranslate"><span class="pre">smtplib</span></code></a> 所支持的每种认证方法只要被服务器声明支持就会被依次尝试。 请参阅 <a class="reference internal" href="#smtplib.SMTP.auth" title="smtplib.SMTP.auth"><code class="xref py py-meth docutils literal notranslate"><span class="pre">auth()</span></code></a> 获取受支持的认证方法列表。 <em>initial_response_ok</em> 会被传递给 <a class="reference internal" href="#smtplib.SMTP.auth" title="smtplib.SMTP.auth"><code class="xref py py-meth docutils literal notranslate"><span class="pre">auth()</span></code></a>。</p>
|
||
<p>可选的关键字参数 <em>initial_response_ok</em> 对于支持它的认证方法,是否可以与 <code class="docutils literal notranslate"><span class="pre">AUTH</span></code> 命令一起发送 <span class="target" id="index-31"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc4954.html"><strong>RFC 4954</strong></a> 中所规定的“初始响应”,而不是要求回复/响应。</p>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">在 3.5 版更改: </span>可能会引发 <a class="reference internal" href="#smtplib.SMTPNotSupportedError" title="smtplib.SMTPNotSupportedError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">SMTPNotSupportedError</span></code></a>,并添加 <em>initial_response_ok</em> 形参。</p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="smtplib.SMTP.auth">
|
||
<code class="sig-prename descclassname">SMTP.</code><code class="sig-name descname">auth</code><span class="sig-paren">(</span><em class="sig-param">mechanism</em>, <em class="sig-param">authobject</em>, <em class="sig-param">*</em>, <em class="sig-param">initial_response_ok=True</em><span class="sig-paren">)</span><a class="headerlink" href="#smtplib.SMTP.auth" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>为指定的认证机制 <em>mechanism</em> 发送 <code class="docutils literal notranslate"><span class="pre">SMTP</span></code> <code class="docutils literal notranslate"><span class="pre">AUTH</span></code> 命令,并通过 <em>authobject</em> 处理回复响应。</p>
|
||
<p><em>mechanism</em> 指定要使用何种认证机制作为 <code class="docutils literal notranslate"><span class="pre">AUTH</span></code> 命令的参数;可用的值是在 <code class="xref py py-attr docutils literal notranslate"><span class="pre">esmtp_features</span></code> 的 <code class="docutils literal notranslate"><span class="pre">auth</span></code> 元素中列出的内容。</p>
|
||
<p><em>authobject</em> 必须是接受一个可选的单独参数的可调用对象:</p>
|
||
<blockquote>
|
||
<div><p>data = authobject(challenge=None)</p>
|
||
</div></blockquote>
|
||
<p>如果可选的关键字参数 <em>initial_response_ok</em> 为真值,则将先不带参数地调用 <code class="docutils literal notranslate"><span class="pre">authobject()</span></code>。 它可以返回 <span class="target" id="index-32"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc4954.html"><strong>RFC 4954</strong></a> "初始响应" ASCII <code class="docutils literal notranslate"><span class="pre">str</span></code>,其内容将被编码并使用下述的 <code class="docutils literal notranslate"><span class="pre">AUTH</span></code> 命令来发送。 如果 <code class="docutils literal notranslate"><span class="pre">authobject()</span></code> 不支持初始响应(例如由于要求一个回复),它应当将 <code class="docutils literal notranslate"><span class="pre">None</span></code> 作为附带 <code class="docutils literal notranslate"><span class="pre">challenge=None</span></code> 调用的返回值。 如果 <em>initial_response_ok</em> 为假值,则 <code class="docutils literal notranslate"><span class="pre">authobject()</span></code> 将不会附带 <code class="docutils literal notranslate"><span class="pre">None</span></code> 被首先调用。</p>
|
||
<p>如果初始响应检测返回了 <code class="docutils literal notranslate"><span class="pre">None</span></code>,或者如果 <em>initial_response_ok</em> 为假值,则将调用 <code class="docutils literal notranslate"><span class="pre">authobject()</span></code> 来处理服务器的回复响应;它所传递的 <em>challenge</em> 参数将为一个 <code class="docutils literal notranslate"><span class="pre">bytes</span></code>。 它应当返回用 base64 进行编码的 ASCII <code class="docutils literal notranslate"><span class="pre">str</span></code> <em>data</em> 并发送给服务器。</p>
|
||
<p><code class="docutils literal notranslate"><span class="pre">SMTP</span></code> 类提供的 <code class="docutils literal notranslate"><span class="pre">authobjects</span></code> 针对 <code class="docutils literal notranslate"><span class="pre">CRAM-MD5</span></code>, <code class="docutils literal notranslate"><span class="pre">PLAIN</span></code> 和 <code class="docutils literal notranslate"><span class="pre">LOGIN</span></code> 等机制;它们的名称分别是 <code class="docutils literal notranslate"><span class="pre">SMTP.auth_cram_md5</span></code>, <code class="docutils literal notranslate"><span class="pre">SMTP.auth_plain</span></code> 和 <code class="docutils literal notranslate"><span class="pre">SMTP.auth_login</span></code>。 它们都要求将 <code class="docutils literal notranslate"><span class="pre">user</span></code> 和 <code class="docutils literal notranslate"><span class="pre">password</span></code> 这两个 <code class="docutils literal notranslate"><span class="pre">SMTP</span></code> 实例属性设为适当的值。</p>
|
||
<p>用户代码通常不需要直接调用 <code class="docutils literal notranslate"><span class="pre">auth</span></code>,而是调用 <a class="reference internal" href="#smtplib.SMTP.login" title="smtplib.SMTP.login"><code class="xref py py-meth docutils literal notranslate"><span class="pre">login()</span></code></a> 方法,它将按上述顺序依次尝试上述每一种机制。 <code class="docutils literal notranslate"><span class="pre">auth</span></code> 被公开以便辅助实现 <a class="reference internal" href="#module-smtplib" title="smtplib: SMTP protocol client (requires sockets)."><code class="xref py py-mod docutils literal notranslate"><span class="pre">smtplib</span></code></a> 没有(或尚未)直接支持的认证方法。</p>
|
||
<div class="versionadded">
|
||
<p><span class="versionmodified added">3.5 新版功能.</span></p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="smtplib.SMTP.starttls">
|
||
<code class="sig-prename descclassname">SMTP.</code><code class="sig-name descname">starttls</code><span class="sig-paren">(</span><em class="sig-param">keyfile=None</em>, <em class="sig-param">certfile=None</em>, <em class="sig-param">context=None</em><span class="sig-paren">)</span><a class="headerlink" href="#smtplib.SMTP.starttls" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>将 SMTP 连接设为 TLS (传输层安全) 模式。 后续的所有 SMTP 命令都将被加密。 你应当随即再次调用 <a class="reference internal" href="#smtplib.SMTP.ehlo" title="smtplib.SMTP.ehlo"><code class="xref py py-meth docutils literal notranslate"><span class="pre">ehlo()</span></code></a>。</p>
|
||
<p>如果提供了 <em>keyfile</em> 和 <em>certfile</em>,它们会被用来创建 <a class="reference internal" href="ssl.html#ssl.SSLContext" title="ssl.SSLContext"><code class="xref py py-class docutils literal notranslate"><span class="pre">ssl.SSLContext</span></code></a>。</p>
|
||
<p>可选的 <em>context</em> 形参是一个 <a class="reference internal" href="ssl.html#ssl.SSLContext" title="ssl.SSLContext"><code class="xref py py-class docutils literal notranslate"><span class="pre">ssl.SSLContext</span></code></a> 对象;它是使用密钥文件和证书的替代方式,如果指定了该形参则 <em>keyfile</em> 和 <em>certfile</em> 都应为 <code class="docutils literal notranslate"><span class="pre">None</span></code>。</p>
|
||
<p>如果这个会话中没有先前的 <code class="docutils literal notranslate"><span class="pre">EHLO</span></code> or <code class="docutils literal notranslate"><span class="pre">HELO</span></code> 命令,该方法会首先尝试 ESMTP <code class="docutils literal notranslate"><span class="pre">EHLO</span></code>。</p>
|
||
<div class="deprecated">
|
||
<p><span class="versionmodified deprecated">3.6 版后已移除: </span><em>keyfile</em> 和 <em>certfile</em> 已弃用并转而推荐 <em>context</em>。 请改用 <a class="reference internal" href="ssl.html#ssl.SSLContext.load_cert_chain" title="ssl.SSLContext.load_cert_chain"><code class="xref py py-meth docutils literal notranslate"><span class="pre">ssl.SSLContext.load_cert_chain()</span></code></a> 或让 <a class="reference internal" href="ssl.html#ssl.create_default_context" title="ssl.create_default_context"><code class="xref py py-func docutils literal notranslate"><span class="pre">ssl.create_default_context()</span></code></a> 为你选择系统所信任的 CA 证书。</p>
|
||
</div>
|
||
<dl class="simple">
|
||
<dt><a class="reference internal" href="#smtplib.SMTPHeloError" title="smtplib.SMTPHeloError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">SMTPHeloError</span></code></a></dt><dd><p>服务器没有正确回复 <code class="docutils literal notranslate"><span class="pre">HELO</span></code> 问候。</p>
|
||
</dd>
|
||
<dt><a class="reference internal" href="#smtplib.SMTPNotSupportedError" title="smtplib.SMTPNotSupportedError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">SMTPNotSupportedError</span></code></a></dt><dd><p>服务器不支持 STARTTLS 扩展。</p>
|
||
</dd>
|
||
<dt><a class="reference internal" href="exceptions.html#RuntimeError" title="RuntimeError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">RuntimeError</span></code></a></dt><dd><p>SSL/TLS 支持在你的 Python 解释器上不可用。</p>
|
||
</dd>
|
||
</dl>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">在 3.3 版更改: </span>增加了 <em>context</em>。</p>
|
||
</div>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">在 3.4 版更改: </span>此方法现在支持使用 <code class="xref py py-attr docutils literal notranslate"><span class="pre">SSLContext.check_hostname</span></code> 和 <em>服务器名称指示符</em> (参见 <a class="reference internal" href="ssl.html#ssl.HAS_SNI" title="ssl.HAS_SNI"><code class="xref py py-data docutils literal notranslate"><span class="pre">HAS_SNI</span></code></a>) 进行主机名检查。</p>
|
||
</div>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">在 3.5 版更改: </span>因缺少 STARTTLS 支持而引发的错误现在是 <a class="reference internal" href="#smtplib.SMTPNotSupportedError" title="smtplib.SMTPNotSupportedError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">SMTPNotSupportedError</span></code></a> 子类而不是 <a class="reference internal" href="#smtplib.SMTPException" title="smtplib.SMTPException"><code class="xref py py-exc docutils literal notranslate"><span class="pre">SMTPException</span></code></a> 基类。</p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="smtplib.SMTP.sendmail">
|
||
<code class="sig-prename descclassname">SMTP.</code><code class="sig-name descname">sendmail</code><span class="sig-paren">(</span><em class="sig-param">from_addr</em>, <em class="sig-param">to_addrs</em>, <em class="sig-param">msg</em>, <em class="sig-param">mail_options=()</em>, <em class="sig-param">rcpt_options=()</em><span class="sig-paren">)</span><a class="headerlink" href="#smtplib.SMTP.sendmail" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>发送邮件。必要参数是一个 <span class="target" id="index-33"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc822.html"><strong>RFC 822</strong></a> 发件地址字符串,一个 <span class="target" id="index-34"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc822.html"><strong>RFC 822</strong></a> 收件地址字符串列表(裸字符串将被视为含有 1 个地址的列表),以及一个消息字符串。调用者可以将 ESMTP 选项列表(如 <code class="docutils literal notranslate"><span class="pre">8bitmime</span></code>)作为 <em>mail_options</em> 传入,用于 <code class="docutils literal notranslate"><span class="pre">MAIL</span> <span class="pre">FROM</span></code> 命令。需要与所有 <code class="docutils literal notranslate"><span class="pre">RCPT</span></code> 命令一起使用的 ESMTP 选项(如 <code class="docutils literal notranslate"><span class="pre">DSN</span></code> 命令)可以作为 <em>rcpt_options</em> 传入。(如果需要对不同的收件人使用不同的 ESMTP 选项,则必须使用底层的方法来发送消息,如 <code class="xref py py-meth docutils literal notranslate"><span class="pre">mail()</span></code>, <code class="xref py py-meth docutils literal notranslate"><span class="pre">rcpt()</span></code> 和 <code class="xref py py-meth docutils literal notranslate"><span class="pre">data()</span></code>。)</p>
|
||
<div class="admonition note">
|
||
<p class="admonition-title">注解</p>
|
||
<p><em>from_addr</em> 和 <em>to_addrs</em> 形参被用来构造传输代理所使用的消息封包。 <code class="docutils literal notranslate"><span class="pre">sendmail</span></code> 不会以任何方式修改消息标头。</p>
|
||
</div>
|
||
<p><em>msg</em> 可以是一个包含 ASCII 范围内字符的字符串,或是一个字节串。 字符串会使用 ascii 编解码器编码为字节串,并且单独的 <code class="docutils literal notranslate"><span class="pre">\r</span></code> 和 <code class="docutils literal notranslate"><span class="pre">\n</span></code> 字符会被转换为 <code class="docutils literal notranslate"><span class="pre">\r\n</span></code> 字符序列。 字节串则不会被修改。</p>
|
||
<p>如果在此之前本会话没有执行过 <code class="docutils literal notranslate"><span class="pre">EHLO</span></code> 或 <code class="docutils literal notranslate"><span class="pre">HELO</span></code> 命令,此方法会先尝试 ESMTP <code class="docutils literal notranslate"><span class="pre">EHLO</span></code>。 如果服务器执行了 ESMTP,消息大小和每个指定的选项将被传递给它(如果指定的选项属于服务器声明的特性集)。 如果 <code class="docutils literal notranslate"><span class="pre">EHLO</span></code> 失败,则将尝试 <code class="docutils literal notranslate"><span class="pre">HELO</span></code> 并屏蔽 ESMTP 选项。</p>
|
||
<p>如果邮件被至少一个接收方接受则此方法将正常返回。 在其他情况下它将引发异常。 也就是说,如果此方法没有引发异常,则应当会有人收到你的邮件。 如果此方法没有引发异常,它将返回一个字典,其中的条目对应每个拒绝的接收方。 每个条目均包含由服务器发送的 SMTP 错误代码和相应错误消息所组成的元组。</p>
|
||
<p>如果 <code class="docutils literal notranslate"><span class="pre">SMTPUTF8</span></code> 包括在 <em>mail_options</em> 中,并且被服务器所支持,则 <em>from_addr</em> 和 <em>to_addrs</em> 可能包含非 ASCII 字符。</p>
|
||
<p>此方法可能引发以下异常:</p>
|
||
<dl class="simple">
|
||
<dt><a class="reference internal" href="#smtplib.SMTPRecipientsRefused" title="smtplib.SMTPRecipientsRefused"><code class="xref py py-exc docutils literal notranslate"><span class="pre">SMTPRecipientsRefused</span></code></a></dt><dd><p>所有收件人都被拒绝。 无人收到邮件。 该异常的 <code class="xref py py-attr docutils literal notranslate"><span class="pre">recipients</span></code> 属性是一个字典,其中有被拒绝收件人的信息(类似于至少有一个收件人接受邮件时所返回的信息)。</p>
|
||
</dd>
|
||
<dt><a class="reference internal" href="#smtplib.SMTPHeloError" title="smtplib.SMTPHeloError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">SMTPHeloError</span></code></a></dt><dd><p>服务器没有正确回复 <code class="docutils literal notranslate"><span class="pre">HELO</span></code> 问候。</p>
|
||
</dd>
|
||
<dt><a class="reference internal" href="#smtplib.SMTPSenderRefused" title="smtplib.SMTPSenderRefused"><code class="xref py py-exc docutils literal notranslate"><span class="pre">SMTPSenderRefused</span></code></a></dt><dd><p>服务器不接受 <em>from_addr</em>。</p>
|
||
</dd>
|
||
<dt><a class="reference internal" href="#smtplib.SMTPDataError" title="smtplib.SMTPDataError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">SMTPDataError</span></code></a></dt><dd><p>服务器回复了一个意外的错误代码(而不是拒绝收件人)。</p>
|
||
</dd>
|
||
<dt><a class="reference internal" href="#smtplib.SMTPNotSupportedError" title="smtplib.SMTPNotSupportedError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">SMTPNotSupportedError</span></code></a></dt><dd><p>在 <em>mail_options</em> 中给出了 <code class="docutils literal notranslate"><span class="pre">SMTPUTF8</span></code> 但是不被服务器所支持。</p>
|
||
</dd>
|
||
</dl>
|
||
<p>除非另有说明,即使在引发异常之后连接仍将被打开。</p>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">在 3.2 版更改: </span><em>msg</em> 可以为字节串。</p>
|
||
</div>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">在 3.5 版更改: </span>增加了 <code class="docutils literal notranslate"><span class="pre">SMTPUTF8</span></code> 支持,并且如果指定了 <code class="docutils literal notranslate"><span class="pre">SMTPUTF8</span></code> 但是不被服务器所支持则可能会引发 <a class="reference internal" href="#smtplib.SMTPNotSupportedError" title="smtplib.SMTPNotSupportedError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">SMTPNotSupportedError</span></code></a>。</p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="smtplib.SMTP.send_message">
|
||
<code class="sig-prename descclassname">SMTP.</code><code class="sig-name descname">send_message</code><span class="sig-paren">(</span><em class="sig-param">msg</em>, <em class="sig-param">from_addr=None</em>, <em class="sig-param">to_addrs=None</em>, <em class="sig-param">mail_options=()</em>, <em class="sig-param">rcpt_options=()</em><span class="sig-paren">)</span><a class="headerlink" href="#smtplib.SMTP.send_message" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>本方法是一种快捷方法,用于带着消息调用 <a class="reference internal" href="#smtplib.SMTP.sendmail" title="smtplib.SMTP.sendmail"><code class="xref py py-meth docutils literal notranslate"><span class="pre">sendmail()</span></code></a>,消息由 <a class="reference internal" href="email.compat32-message.html#email.message.Message" title="email.message.Message"><code class="xref py py-class docutils literal notranslate"><span class="pre">email.message.Message</span></code></a> 对象表示。参数的含义与 <a class="reference internal" href="#smtplib.SMTP.sendmail" title="smtplib.SMTP.sendmail"><code class="xref py py-meth docutils literal notranslate"><span class="pre">sendmail()</span></code></a> 中的相同,除了 <em>msg</em>,它是一个 <code class="docutils literal notranslate"><span class="pre">Message</span></code> 对象。</p>
|
||
<p>如果 <em>from_addr</em> 为 <code class="docutils literal notranslate"><span class="pre">None</span></code> 或 <em>to_addrs</em> 为 <code class="docutils literal notranslate"><span class="pre">None</span></code> ,那么 <code class="docutils literal notranslate"><span class="pre">send_message</span></code> 将根据 <span class="target" id="index-35"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc5322.html"><strong>RFC 5322</strong></a>,从 <em>msg</em> 头部提取地址填充下列参数:如果头部存在 <em class="mailheader">Sender</em> 字段,则用它填充 <em>from_addr</em>,不存在则用 <em class="mailheader">From</em> 字段填充 <em>from_addr</em>。<em>to_addrs</em> 组合了 <em>msg</em> 中的 <em class="mailheader">To</em>, <em class="mailheader">Cc</em> 和 <em class="mailheader">Bcc</em> 字段的值(字段存在的情况下)。如果一组 <em class="mailheader">Resent-*</em> 头部恰好出现在 message 中,那么就忽略常规的头部,改用 <em class="mailheader">Resent-*</em> 头部。如果 message 包含多组 <em class="mailheader">Resent-*</em> 头部,则引发 <a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">ValueError</span></code></a>,因为无法明确检测出哪一组 <em class="mailheader">Resent-</em> 头部是最新的。</p>
|
||
<p><code class="docutils literal notranslate"><span class="pre">send_message</span></code> 使用 <a class="reference internal" href="email.generator.html#email.generator.BytesGenerator" title="email.generator.BytesGenerator"><code class="xref py py-class docutils literal notranslate"><span class="pre">BytesGenerator</span></code></a> 来序列化 <em>msg</em>,且将 <code class="docutils literal notranslate"><span class="pre">\r\n</span></code> 作为 <em>linesep</em>,并调用 <a class="reference internal" href="#smtplib.SMTP.sendmail" title="smtplib.SMTP.sendmail"><code class="xref py py-meth docutils literal notranslate"><span class="pre">sendmail()</span></code></a> 来传输序列化后的结果。无论 <em>from_addr</em> 和 <em>to_addrs</em> 的值为何,<code class="docutils literal notranslate"><span class="pre">send_message</span></code> 都不会传输 <em>msg</em> 中可能出现的 <em class="mailheader">Bcc</em> 或 <em class="mailheader">Resent-Bcc</em> 头部。如果 <em>from_addr</em> 和 <em>to_addrs</em> 中的某个地址包含非 ASCII 字符,且服务器没有声明支持 <code class="docutils literal notranslate"><span class="pre">SMTPUTF8</span></code>,则引发 <code class="xref py py-exc docutils literal notranslate"><span class="pre">SMTPNotSupported</span></code> 错误。如果服务器支持,则 <code class="docutils literal notranslate"><span class="pre">Message</span></code> 将按新克隆的 <a class="reference internal" href="email.policy.html#module-email.policy" title="email.policy: Controlling the parsing and generating of messages"><code class="xref py py-mod docutils literal notranslate"><span class="pre">policy</span></code></a> 进行序列化,其中的 <a class="reference internal" href="email.policy.html#email.policy.EmailPolicy.utf8" title="email.policy.EmailPolicy.utf8"><code class="xref py py-attr docutils literal notranslate"><span class="pre">utf8</span></code></a> 属性被设置为 <code class="docutils literal notranslate"><span class="pre">True</span></code>,且 <code class="docutils literal notranslate"><span class="pre">SMTPUTF8</span></code> 和 <code class="docutils literal notranslate"><span class="pre">BODY=8BITMIME</span></code> 被添加到 <em>mail_options</em> 中。</p>
|
||
<div class="versionadded">
|
||
<p><span class="versionmodified added">3.2 新版功能.</span></p>
|
||
</div>
|
||
<div class="versionadded">
|
||
<p><span class="versionmodified added">3.5 新版功能: </span>支持国际化地址 (<code class="docutils literal notranslate"><span class="pre">SMTPUTF8</span></code>)。</p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="smtplib.SMTP.quit">
|
||
<code class="sig-prename descclassname">SMTP.</code><code class="sig-name descname">quit</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#smtplib.SMTP.quit" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>终结 SMTP 会话并关闭连接。 返回 SMTP <code class="docutils literal notranslate"><span class="pre">QUIT</span></code> 命令的结果。</p>
|
||
</dd></dl>
|
||
|
||
<p>与标准 SMTP/ESMTP 命令 <code class="docutils literal notranslate"><span class="pre">HELP</span></code>, <code class="docutils literal notranslate"><span class="pre">RSET</span></code>, <code class="docutils literal notranslate"><span class="pre">NOOP</span></code>, <code class="docutils literal notranslate"><span class="pre">MAIL</span></code>, <code class="docutils literal notranslate"><span class="pre">RCPT</span></code> 和 <code class="docutils literal notranslate"><span class="pre">DATA</span></code> 对应的低层级方法也是受支持的。 通常不需要直接调用这些方法,因此它们没有被写入本文档。 相关细节请参看模块代码。</p>
|
||
</section>
|
||
<section id="smtp-example">
|
||
<span id="id2"></span><h2>SMTP 示例<a class="headerlink" href="#smtp-example" title="永久链接至标题">¶</a></h2>
|
||
<p>这个例子提示用户输入消息封包所需的地址 ('To' 和 'From' 地址),以及所要封包的消息。 请注意包括在消息中的标头必须包括在输入的消息中;这个例子不对 <span class="target" id="index-36"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc822.html"><strong>RFC 822</strong></a> 标头进行任何处理。 特别地,'To' 和 'From' 地址必须显式地包括在消息标头中。</p>
|
||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">smtplib</span>
|
||
|
||
<span class="k">def</span> <span class="nf">prompt</span><span class="p">(</span><span class="n">prompt</span><span class="p">):</span>
|
||
<span class="k">return</span> <span class="nb">input</span><span class="p">(</span><span class="n">prompt</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
||
|
||
<span class="n">fromaddr</span> <span class="o">=</span> <span class="n">prompt</span><span class="p">(</span><span class="s2">"From: "</span><span class="p">)</span>
|
||
<span class="n">toaddrs</span> <span class="o">=</span> <span class="n">prompt</span><span class="p">(</span><span class="s2">"To: "</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
|
||
<span class="nb">print</span><span class="p">(</span><span class="s2">"Enter message, end with ^D (Unix) or ^Z (Windows):"</span><span class="p">)</span>
|
||
|
||
<span class="c1"># Add the From: and To: headers at the start!</span>
|
||
<span class="n">msg</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"From: </span><span class="si">%s</span><span class="se">\r\n</span><span class="s2">To: </span><span class="si">%s</span><span class="se">\r\n\r\n</span><span class="s2">"</span>
|
||
<span class="o">%</span> <span class="p">(</span><span class="n">fromaddr</span><span class="p">,</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">toaddrs</span><span class="p">)))</span>
|
||
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
|
||
<span class="k">try</span><span class="p">:</span>
|
||
<span class="n">line</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span>
|
||
<span class="k">except</span> <span class="ne">EOFError</span><span class="p">:</span>
|
||
<span class="k">break</span>
|
||
<span class="k">if</span> <span class="ow">not</span> <span class="n">line</span><span class="p">:</span>
|
||
<span class="k">break</span>
|
||
<span class="n">msg</span> <span class="o">=</span> <span class="n">msg</span> <span class="o">+</span> <span class="n">line</span>
|
||
|
||
<span class="nb">print</span><span class="p">(</span><span class="s2">"Message length is"</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">msg</span><span class="p">))</span>
|
||
|
||
<span class="n">server</span> <span class="o">=</span> <span class="n">smtplib</span><span class="o">.</span><span class="n">SMTP</span><span class="p">(</span><span class="s1">'localhost'</span><span class="p">)</span>
|
||
<span class="n">server</span><span class="o">.</span><span class="n">set_debuglevel</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
||
<span class="n">server</span><span class="o">.</span><span class="n">sendmail</span><span class="p">(</span><span class="n">fromaddr</span><span class="p">,</span> <span class="n">toaddrs</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span>
|
||
<span class="n">server</span><span class="o">.</span><span class="n">quit</span><span class="p">()</span>
|
||
</pre></div>
|
||
</div>
|
||
<div class="admonition note">
|
||
<p class="admonition-title">注解</p>
|
||
<p>通常,你将需要使用 <a class="reference internal" href="email.html#module-email" title="email: Package supporting the parsing, manipulating, and generating email messages."><code class="xref py py-mod docutils literal notranslate"><span class="pre">email</span></code></a> 包的特性来构造电子邮件消息,然后你可以通过 <a class="reference internal" href="#smtplib.SMTP.send_message" title="smtplib.SMTP.send_message"><code class="xref py py-meth docutils literal notranslate"><span class="pre">send_message()</span></code></a> 来发送它,参见 <a class="reference internal" href="email.examples.html#email-examples"><span class="std std-ref">email: 示例</span></a>。</p>
|
||
</div>
|
||
</section>
|
||
</section>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
||
<div class="sphinxsidebarwrapper">
|
||
<h3><a href="../contents.html">目录</a></h3>
|
||
<ul>
|
||
<li><a class="reference internal" href="#"><code class="xref py py-mod docutils literal notranslate"><span class="pre">smtplib</span></code> --- SMTP 协议客户端</a><ul>
|
||
<li><a class="reference internal" href="#smtp-objects">SMTP 对象</a></li>
|
||
<li><a class="reference internal" href="#smtp-example">SMTP 示例</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
|
||
<h4>上一个主题</h4>
|
||
<p class="topless"><a href="nntplib.html"
|
||
title="上一章"><code class="xref py py-mod docutils literal notranslate"><span class="pre">nntplib</span></code> --- NNTP 协议客户端</a></p>
|
||
<h4>下一个主题</h4>
|
||
<p class="topless"><a href="smtpd.html"
|
||
title="下一章"><code class="xref py py-mod docutils literal notranslate"><span class="pre">smtpd</span></code> --- SMTP 服务器</a></p>
|
||
<div role="note" aria-label="source link">
|
||
<h3>本页</h3>
|
||
<ul class="this-page-menu">
|
||
<li><a href="../bugs.html">报告 Bug</a></li>
|
||
<li>
|
||
<a href="https://github.com/python/cpython/blob/3.8/Doc/library/smtplib.rst"
|
||
rel="nofollow">显示源代码
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="clearer"></div>
|
||
</div>
|
||
<div class="related" role="navigation" aria-label="related navigation">
|
||
<h3>导航</h3>
|
||
<ul>
|
||
<li class="right" style="margin-right: 10px">
|
||
<a href="../genindex.html" title="总目录"
|
||
>索引</a></li>
|
||
<li class="right" >
|
||
<a href="../py-modindex.html" title="Python 模块索引"
|
||
>模块</a> |</li>
|
||
<li class="right" >
|
||
<a href="smtpd.html" title="smtpd --- SMTP 服务器"
|
||
>下一页</a> |</li>
|
||
<li class="right" >
|
||
<a href="nntplib.html" title="nntplib --- NNTP 协议客户端"
|
||
>上一页</a> |</li>
|
||
|
||
<li><img src="../_static/py.svg" alt="python logo" style="vertical-align: middle; margin-top: -1px"/></li>
|
||
<li><a href="https://www.python.org/">Python</a> »</li>
|
||
<li class="switchers">
|
||
<div class="language_switcher_placeholder"></div>
|
||
<div class="version_switcher_placeholder"></div>
|
||
</li>
|
||
<li>
|
||
|
||
</li>
|
||
<li id="cpython-language-and-version">
|
||
<a href="../index.html">3.8.20 Documentation</a> »
|
||
</li>
|
||
|
||
<li class="nav-item nav-item-1"><a href="index.html" >Python 标准库</a> »</li>
|
||
<li class="nav-item nav-item-2"><a href="internet.html" >互联网协议和支持</a> »</li>
|
||
<li class="right">
|
||
|
||
|
||
<div class="inline-search" role="search">
|
||
<form class="inline-search" action="../search.html" method="get">
|
||
<input placeholder="快速搜索" aria-label="快速搜索" type="text" name="q" />
|
||
<input type="submit" value="转向" />
|
||
<input type="hidden" name="check_keywords" value="yes" />
|
||
<input type="hidden" name="area" value="default" />
|
||
</form>
|
||
</div>
|
||
|
|
||
</li>
|
||
|
||
</ul>
|
||
</div>
|
||
<div class="footer">
|
||
© <a href="../copyright.html">版权所有</a> 2001-2024, Python Software Foundation.
|
||
<br />
|
||
This page is licensed under the Python Software Foundation License Version 2.
|
||
<br />
|
||
Examples, recipes, and other code in the documentation are additionally licensed under the Zero Clause BSD License.
|
||
<br />
|
||
|
||
<br />
|
||
|
||
The Python Software Foundation is a non-profit corporation.
|
||
<a href="https://www.python.org/psf/donations/">Please donate.</a>
|
||
<br />
|
||
<br />
|
||
|
||
最后更新于 12月 09, 2024.
|
||
<a href="https://docs.python.org/3/bugs.html">Found a bug</a>?
|
||
<br />
|
||
|
||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 2.4.4.
|
||
</div>
|
||
|
||
</body>
|
||
</html> |