mirror of
https://github.com/fofolee/uTools-Manuals.git
synced 2025-06-08 23:14:06 +08:00
27 lines
57 KiB
HTML
27 lines
57 KiB
HTML
<div class="body" role="main"><div class="section" id="module-imaplib"><h1><span class="yiyi-st" id="yiyi-10">21.15. <a class="reference internal" href="#module-imaplib" title="imaplib: IMAP4 protocol client (requires sockets)."><code class="xref py py-mod docutils literal"><span class="pre">imaplib</span></code></a> - IMAP4协议客户端</span></h1><p><span class="yiyi-st" id="yiyi-11"><strong>源代码:</strong> <a class="reference external" href="https://hg.python.org/cpython/file/3.5/Lib/imaplib.py">Lib/imaplib.py</a></span></p><p><span class="yiyi-st" id="yiyi-12">此模块定义了三个类:<a class="reference internal" href="#imaplib.IMAP4" title="imaplib.IMAP4"><code class="xref py py-class docutils literal"><span class="pre">IMAP4</span></code></a>,<a class="reference internal" href="#imaplib.IMAP4_SSL" title="imaplib.IMAP4_SSL"><code class="xref py py-class docutils literal"><span class="pre">IMAP4_SSL</span></code></a>和<a class="reference internal" href="#imaplib.IMAP4_stream" title="imaplib.IMAP4_stream"><code class="xref py py-class docutils literal"><span class="pre">IMAP4_stream</span></code></a>,它封装与IMAP4服务器的连接并实现IMAP4rev1客户端的大型子集协议,如<span class="target" id="index-1"></span> <a class="rfc reference external" href="https://tools.ietf.org/html/rfc2060.html"><strong>RFC 2060</strong></a>中所定义。</span><span class="yiyi-st" id="yiyi-13">它与IMAP4(<span class="target" id="index-2"></span> <a class="rfc reference external" href="https://tools.ietf.org/html/rfc1730.html"><strong>RFC 1730</strong></a>)服务器向后兼容,但请注意,IMAP4不支持<code class="docutils literal"><span class="pre">STATUS</span></code>命令。</span></p><p><span class="yiyi-st" id="yiyi-14">由<a class="reference internal" href="#module-imaplib" title="imaplib: IMAP4 protocol client (requires sockets)."><code class="xref py py-mod docutils literal"><span class="pre">imaplib</span></code></a>模块提供三个类,<a class="reference internal" href="#imaplib.IMAP4" title="imaplib.IMAP4"><code class="xref py py-class docutils literal"><span class="pre">IMAP4</span></code></a>是基类:</span></p><dl class="class"><dt id="imaplib.IMAP4"><span class="yiyi-st" id="yiyi-15"><em class="property">class </em><code class="descclassname">imaplib.</code><code class="descname">IMAP4</code><span class="sig-paren">(</span><em>host=''</em>, <em>port=IMAP4_PORT</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-16">此类实现实际的IMAP4协议。</span><span class="yiyi-st" id="yiyi-17">创建连接并在实例初始化时确定协议版本(IMAP4或IMAP4rev1)。</span><span class="yiyi-st" id="yiyi-18">如果未指定<em>主机</em>,则使用<code class="docutils literal"><span class="pre">''</span></code>(本地主机)。</span><span class="yiyi-st" id="yiyi-19">如果省略<em>端口</em>,则使用标准IMAP4端口(143)。</span></p><p><span class="yiyi-st" id="yiyi-20"><a class="reference internal" href="#imaplib.IMAP4" title="imaplib.IMAP4"><code class="xref py py-class docutils literal"><span class="pre">IMAP4</span></code></a>类支持<a class="reference internal" href="../reference/compound_stmts.html#with"><code class="xref std std-keyword docutils literal"><span class="pre">with</span></code></a>语句。</span><span class="yiyi-st" id="yiyi-21">如果这样使用,在<a class="reference internal" href="../reference/compound_stmts.html#with"><code class="xref std std-keyword docutils literal"><span class="pre">with</span></code></a>语句退出时,自动发出IMAP4 <code class="docutils literal"><span class="pre">LOGOUT</span></code>命令。</span><span class="yiyi-st" id="yiyi-22">例如</span><span class="yiyi-st" id="yiyi-23">:</span></p><div class="highlight-python3"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">imaplib</span> <span class="k">import</span> <span class="n">IMAP4</span>
|
||
<span class="gp">>>> </span><span class="k">with</span> <span class="n">IMAP4</span><span class="p">(</span><span class="s2">"domain.org"</span><span class="p">)</span> <span class="k">as</span> <span class="n">M</span><span class="p">:</span>
|
||
<span class="gp">... </span> <span class="n">M</span><span class="o">.</span><span class="n">noop</span><span class="p">()</span>
|
||
<span class="gp">...</span>
|
||
<span class="go">('OK', [b'Nothing Accomplished. d25if65hy903weo.87'])</span>
|
||
</pre></div></div><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-24"><span class="versionmodified">在版本3.5中已更改:</span>添加了对<a class="reference internal" href="../reference/compound_stmts.html#with"><code class="xref std std-keyword docutils literal"><span class="pre">with</span></code></a>语句的支持。</span></p></div></dd></dl><p><span class="yiyi-st" id="yiyi-25">有三个异常定义为<a class="reference internal" href="#imaplib.IMAP4" title="imaplib.IMAP4"><code class="xref py py-class docutils literal"><span class="pre">IMAP4</span></code></a>类的属性:</span></p><dl class="exception"><dt id="imaplib.IMAP4.error"><span class="yiyi-st" id="yiyi-26"><em class="property">exception </em><code class="descclassname">IMAP4.</code><code class="descname">error</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-27">对任何错误引发异常。</span><span class="yiyi-st" id="yiyi-28">异常的原因作为字符串传递给构造函数。</span></p></dd></dl><dl class="exception"><dt id="imaplib.IMAP4.abort"><span class="yiyi-st" id="yiyi-29"><em class="property">exception </em><code class="descclassname">IMAP4.</code><code class="descname">abort</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-30">IMAP4服务器错误导致引发此异常。</span><span class="yiyi-st" id="yiyi-31">这是<a class="reference internal" href="#imaplib.IMAP4.error" title="imaplib.IMAP4.error"><code class="xref py py-exc docutils literal"><span class="pre">IMAP4.error</span></code></a>的子类。</span><span class="yiyi-st" id="yiyi-32">注意,关闭实例和实例化一个新实例通常将允许从此异常恢复。</span></p></dd></dl><dl class="exception"><dt id="imaplib.IMAP4.readonly"><span class="yiyi-st" id="yiyi-33"><em class="property">exception </em><code class="descclassname">IMAP4.</code><code class="descname">readonly</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-34">当可写邮箱的状态由服务器更改时,会引发此异常。</span><span class="yiyi-st" id="yiyi-35">这是<a class="reference internal" href="#imaplib.IMAP4.error" title="imaplib.IMAP4.error"><code class="xref py py-exc docutils literal"><span class="pre">IMAP4.error</span></code></a>的子类。</span><span class="yiyi-st" id="yiyi-36">一些其他客户端现在具有写入权限,并且邮箱将需要重新打开以重新获取写入权限。</span></p></dd></dl><p><span class="yiyi-st" id="yiyi-37">还有一个安全连接的子类:</span></p><dl class="class"><dt id="imaplib.IMAP4_SSL"><span class="yiyi-st" id="yiyi-38"><em class="property">class </em><code class="descclassname">imaplib.</code><code class="descname">IMAP4_SSL</code><span class="sig-paren">(</span><em>host=''</em>, <em>port=IMAP4_SSL_PORT</em>, <em>keyfile=None</em>, <em>certfile=None</em>, <em>ssl_context=None</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-39">这是从<a class="reference internal" href="#imaplib.IMAP4" title="imaplib.IMAP4"><code class="xref py py-class docutils literal"><span class="pre">IMAP4</span></code></a>派生的子类,通过SSL加密的套接字连接(要使用此类,您需要一个使用SSL支持编译的套接字模块)。</span><span class="yiyi-st" id="yiyi-40">如果未指定<em>主机</em>,则使用<code class="docutils literal"><span class="pre">''</span></code>(本地主机)。</span><span class="yiyi-st" id="yiyi-41">如果省略<em>端口</em>,则使用标准的IMAP4 over SSL端口(993)。</span><span class="yiyi-st" id="yiyi-42"><em>ssl_context</em>是一个<a class="reference internal" href="ssl.html#ssl.SSLContext" title="ssl.SSLContext"><code class="xref py py-class docutils literal"><span class="pre">ssl.SSLContext</span></code></a>对象,它允许将SSL配置选项,证书和私钥捆绑到单个(可能长期)结构中。</span><span class="yiyi-st" id="yiyi-43">有关最佳做法,请参阅<a class="reference internal" href="ssl.html#ssl-security"><span>Security considerations</span></a>。</span></p><p><span class="yiyi-st" id="yiyi-44"><em>密钥文件</em>和<em>certfile</em>是<em>ssl_context</em>的传统替代品 - 它们可以指向SSL连接的PEM格式的私钥和证书链文件。</span><span class="yiyi-st" id="yiyi-45">请注意,<em>keyfile</em> / <em>certfile</em>参数与<em>ssl_context</em>互斥,如果<em>keyfile引发<a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-class docutils literal"><span class="pre">ValueError</span></code></a> </em> / <em>certfile</em>与<em>ssl_context</em>一起提供。</span></p><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-46"><span class="versionmodified">在版本3.3中已更改:</span> <em>添加了ssl_context</em>参数。</span></p></div><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-47"><span class="versionmodified">在版本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"><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"><span class="pre">ssl.HAS_SNI</span></code></a>)。</span></p></div></dd></dl><p><span class="yiyi-st" id="yiyi-48">第二个子类允许由子进程创建的连接:</span></p><dl class="class"><dt id="imaplib.IMAP4_stream"><span class="yiyi-st" id="yiyi-49"><em class="property">class </em><code class="descclassname">imaplib.</code><code class="descname">IMAP4_stream</code><span class="sig-paren">(</span><em>command</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-50">这是从<a class="reference internal" href="#imaplib.IMAP4" title="imaplib.IMAP4"><code class="xref py py-class docutils literal"><span class="pre">IMAP4</span></code></a>派生的子类,它连接到通过传递<em>命令</em>创建的<code class="docutils literal"><span class="pre">stdin/stdout</span></code>文件描述器到<code class="docutils literal"><span class="pre">subprocess.Popen()</span></code>。</span></p></dd></dl><p><span class="yiyi-st" id="yiyi-51">定义了以下效用函数:</span></p><dl class="function"><dt id="imaplib.Internaldate2tuple"><span class="yiyi-st" id="yiyi-52"><code class="descclassname">imaplib.</code><code class="descname">Internaldate2tuple</code><span class="sig-paren">(</span><em>datestr</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-53">解析IMAP4 <code class="docutils literal"><span class="pre">INTERNALDATE</span></code>字符串并返回相应的本地时间。</span><span class="yiyi-st" id="yiyi-54">返回值为<a class="reference internal" href="time.html#time.struct_time" title="time.struct_time"><code class="xref py py-class docutils literal"><span class="pre">time.struct_time</span></code></a>元组,如果字符串格式错误,则返回None。</span></p></dd></dl><dl class="function"><dt id="imaplib.Int2AP"><span class="yiyi-st" id="yiyi-55"><code class="descclassname">imaplib.</code><code class="descname">Int2AP</code><span class="sig-paren">(</span><em>num</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-56">使用集合[<code class="docutils literal"><span class="pre">A</span></code> ... <code class="docutils literal"><span class="pre">P</span></code>]中的字符将整数转换为字符串表示。</span></p></dd></dl><dl class="function"><dt id="imaplib.ParseFlags"><span class="yiyi-st" id="yiyi-57"><code class="descclassname">imaplib.</code><code class="descname">ParseFlags</code><span class="sig-paren">(</span><em>flagstr</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-58">将IMAP4 <code class="docutils literal"><span class="pre">FLAGS</span></code>响应转换为单个标志的元组。</span></p></dd></dl><dl class="function"><dt id="imaplib.Time2Internaldate"><span class="yiyi-st" id="yiyi-59"><code class="descclassname">imaplib.</code><code class="descname">Time2Internaldate</code><span class="sig-paren">(</span><em>date_time</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-60">将<em>date_time</em>转换为IMAP4 <code class="docutils literal"><span class="pre">INTERNALDATE</span></code>表示形式。</span><span class="yiyi-st" id="yiyi-61">返回值为以下形式的字符串:<code class="docutils literal"><span class="pre">“DD-Mmm-YYYY</span> <span class="pre">HH:MM:SS</span> <span class="pre">+ HHMM” t0>(包括双引号)。</span></code></span><span class="yiyi-st" id="yiyi-62"><em>date_time</em>参数可以是表示自从epoch(由<a class="reference internal" href="time.html#time.time" title="time.time"><code class="xref py py-func docutils literal"><span class="pre">time.time()</span></code></a>返回的秒数)的数字(int或float),表示本地时间的9元组<a class="reference internal" href="time.html#time.struct_time" title="time.struct_time"><code class="xref py py-class docutils literal"><span class="pre">time.struct_time</span></code></a>(由<a class="reference internal" href="time.html#time.localtime" title="time.localtime"><code class="xref py py-func docutils literal"><span class="pre">time.localtime()</span></code></a>返回),一个感知的实例<a class="reference internal" href="datetime.html#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime.datetime</span></code></a>或双引号字符串。</span><span class="yiyi-st" id="yiyi-63">在最后一种情况下,假设它已经是正确的格式。</span></p></dd></dl><p><span class="yiyi-st" id="yiyi-64">请注意,IMAP4邮件编号随邮箱更改而变化;特别是在<code class="docutils literal"><span class="pre">EXPUNGE</span></code>命令执行删除之后,剩余的消息被重新编号。</span><span class="yiyi-st" id="yiyi-65">因此,强烈建议使用UID替代,使用UID命令。</span></p><p><span class="yiyi-st" id="yiyi-66">在模块的结尾,有一个测试部分,其中包含更广泛的使用示例。</span></p><div class="admonition seealso"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-67">也可以看看</span></p><p class="last"><span class="yiyi-st" id="yiyi-68">描述协议以及实施协议的服务器的源和二进制文件的文档都可以在华盛顿大学的<em>IMAP信息中心</em>(<a class="reference external" href="https://www.washington.edu/imap/">https://www.washington.edu/imap/ / t1>)。</a></span></p></div><div class="section" id="imap4-objects"><h2><span class="yiyi-st" id="yiyi-69">21.15.1.</span><span class="yiyi-st" id="yiyi-70">IMAP4对象</span></h2><p><span class="yiyi-st" id="yiyi-71">所有IMAP4rev1命令由具有相同名称的方法表示(大写或小写)。</span></p><p><span class="yiyi-st" id="yiyi-72">命令的所有参数都转换为字符串,除了<code class="docutils literal"><span class="pre">AUTHENTICATE</span></code>和作为IMAP4文字传递的<code class="docutils literal"><span class="pre">APPEND</span></code>的最后一个参数。</span><span class="yiyi-st" id="yiyi-73">如果需要(字符串包含IMAP4协议敏感字符,不包括括号或双引号),每个字符串都被引用。</span><span class="yiyi-st" id="yiyi-74">但是,<code class="docutils literal"><span class="pre">LOGIN</span></code>命令的<em>密码</em>参数始终被引用。</span><span class="yiyi-st" id="yiyi-75">如果你想避免使用引用的参数字符串(例如:<code class="docutils literal"><span class="pre">STORE</span></code>的<em>flags</em>参数),请将字符串括在括号中(例如:<code class="docutils literal"><span class="pre">r'(\Deleted)'</span></code>)。</span></p><p><span class="yiyi-st" id="yiyi-76">每个命令返回一个元组:<code class="docutils literal"><span class="pre">(type,</span> <span class="pre">[data,</span> <span class="pre">...])</span></code>其中<em>类型</em>通常是<code class="docutils literal"><span class="pre">'OK'</span></code>或<code class="docutils literal"><span class="pre">'NO'</span></code>,而<em>数据</em>可以是命令响应中的文本,命令。</span><span class="yiyi-st" id="yiyi-77">每个<em>数据</em>是字符串或元组。</span><span class="yiyi-st" id="yiyi-78">如果是元组,那么第一部分是响应的头部,第二部分包含数据(即:'literal'值)。</span></p><p><span class="yiyi-st" id="yiyi-79">下面的命令的<em>message_set</em>选项是一个字符串,指定一个或多个要执行操作的消息。</span><span class="yiyi-st" id="yiyi-80">它可以是简单消息号(<code class="docutils literal"><span class="pre">'1'</span></code>),消息号范围(<code class="docutils literal"><span class="pre">'2:4'</span></code>)或一组由逗号(<code class="docutils literal"><span class="pre">'1:3,6:9'</span></code>)。</span><span class="yiyi-st" id="yiyi-81">范围可以包含星号以指示无限上界(<code class="docutils literal"><span class="pre">'3:*'</span></code>)。</span></p><p><span class="yiyi-st" id="yiyi-82"><a class="reference internal" href="#imaplib.IMAP4" title="imaplib.IMAP4"><code class="xref py py-class docutils literal"><span class="pre">IMAP4</span></code></a>实例具有以下方法:</span></p><dl class="method"><dt id="imaplib.IMAP4.append"><span class="yiyi-st" id="yiyi-83"><code class="descclassname">IMAP4.</code><code class="descname">append</code><span class="sig-paren">(</span><em>mailbox</em>, <em>flags</em>, <em>date_time</em>, <em>message</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-84">将<em>消息</em>附加到命名邮箱。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.authenticate"><span class="yiyi-st" id="yiyi-85"><code class="descclassname">IMAP4.</code><code class="descname">authenticate</code><span class="sig-paren">(</span><em>mechanism</em>, <em>authobject</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-86">验证命令 - 需要响应处理。</span></p><p><span class="yiyi-st" id="yiyi-87"><em>mechanism</em>指定要使用的认证机制 - 它应该以<code class="docutils literal"><span class="pre">AUTH=mechanism</span></code>的形式出现在实例变量<code class="docutils literal"><span class="pre">capabilities</span></code>中。</span></p><p><span class="yiyi-st" id="yiyi-88"><em>authobject</em>必须是可调用对象:</span></p><div class="highlight-python3"><div class="highlight"><pre><span></span><span class="n">data</span> <span class="o">=</span> <span class="n">authobject</span><span class="p">(</span><span class="n">response</span><span class="p">)</span>
|
||
</pre></div></div><p><span class="yiyi-st" id="yiyi-89">它将被调用来处理服务器继续响应;传递的<em>响应</em>参数将为<code class="docutils literal"><span class="pre">bytes</span></code>。</span><span class="yiyi-st" id="yiyi-90">它应该返回<code class="docutils literal"><span class="pre">bytes</span></code> <em>data</em>,将被base64编码并发送到服务器。</span><span class="yiyi-st" id="yiyi-91">如果应发送客户端中止响应<code class="docutils literal"><span class="pre">*</span></code>,则应返回<code class="docutils literal"><span class="pre">None</span></code>。</span></p><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-92"><span class="versionmodified">在3.5版本中已更改:</span>字符串用户名和密码现在已编码为<code class="docutils literal"><span class="pre">utf-8</span></code>,而不限于ASCII。</span></p></div></dd></dl><dl class="method"><dt id="imaplib.IMAP4.check"><span class="yiyi-st" id="yiyi-93"><code class="descclassname">IMAP4.</code><code class="descname">check</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-94">服务器上的检查点邮箱。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.close"><span class="yiyi-st" id="yiyi-95"><code class="descclassname">IMAP4.</code><code class="descname">close</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-96">关闭当前选定的邮箱。</span><span class="yiyi-st" id="yiyi-97">已删除的邮件将从可写邮箱中删除。</span><span class="yiyi-st" id="yiyi-98">这是<code class="docutils literal"><span class="pre">LOGOUT</span></code>之前的建议命令。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.copy"><span class="yiyi-st" id="yiyi-99"><code class="descclassname">IMAP4.</code><code class="descname">copy</code><span class="sig-paren">(</span><em>message_set</em>, <em>new_mailbox</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-100">将<em>message_set</em>邮件复制到<em>new_mailbox</em>的结尾。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.create"><span class="yiyi-st" id="yiyi-101"><code class="descclassname">IMAP4.</code><code class="descname">create</code><span class="sig-paren">(</span><em>mailbox</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-102">创建名为<em>邮箱</em>的新邮箱。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.delete"><span class="yiyi-st" id="yiyi-103"><code class="descclassname">IMAP4.</code><code class="descname">delete</code><span class="sig-paren">(</span><em>mailbox</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-104">删除名为<em>邮箱</em>的旧邮箱。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.deleteacl"><span class="yiyi-st" id="yiyi-105"><code class="descclassname">IMAP4.</code><code class="descname">deleteacl</code><span class="sig-paren">(</span><em>mailbox</em>, <em>who</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-106">删除为邮箱上的who设置的ACL(删除任何权限)。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.enable"><span class="yiyi-st" id="yiyi-107"><code class="descclassname">IMAP4.</code><code class="descname">enable</code><span class="sig-paren">(</span><em>capability</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-108">启用<em>能力</em>(请参阅<span class="target" id="index-3"></span> <a class="rfc reference external" href="https://tools.ietf.org/html/rfc5161.html"><strong>RFC 5161</strong></a>)。</span><span class="yiyi-st" id="yiyi-109">大多数功能不需要启用。</span><span class="yiyi-st" id="yiyi-110">目前仅支持<code class="docutils literal"><span class="pre">UTF8=ACCEPT</span></code>功能(请参阅<span class="target" id="index-4"></span> <a class="rfc reference external" href="https://tools.ietf.org/html/rfc6855.html"><strong>RFC 6855</strong></a>)。</span></p><div class="versionadded"><p><span class="yiyi-st" id="yiyi-111"><span class="versionmodified">版本3.5中的新功能:</span>支持<a class="reference internal" href="#imaplib.IMAP4.enable" title="imaplib.IMAP4.enable"><code class="xref py py-meth docutils literal"><span class="pre">enable()</span></code></a>方法本身和<span class="target" id="index-5"></span> <a class="rfc reference external" href="https://tools.ietf.org/html/rfc6855.html"><strong>RFC 6855</strong></a></span></p></div></dd></dl><dl class="method"><dt id="imaplib.IMAP4.expunge"><span class="yiyi-st" id="yiyi-112"><code class="descclassname">IMAP4.</code><code class="descname">expunge</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-113">从所选邮箱中永久删除已删除的项目。</span><span class="yiyi-st" id="yiyi-114">为每个已删除的邮件生成<code class="docutils literal"><span class="pre">EXPUNGE</span></code>响应。</span><span class="yiyi-st" id="yiyi-115">返回的数据包含按顺序接收的<code class="docutils literal"><span class="pre">EXPUNGE</span></code>消息编号列表。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.fetch"><span class="yiyi-st" id="yiyi-116"><code class="descclassname">IMAP4.</code><code class="descname">fetch</code><span class="sig-paren">(</span><em>message_set</em>, <em>message_parts</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-117">提取(部分)邮件。</span><span class="yiyi-st" id="yiyi-118"><em>message_parts</em>应为括在括号中的消息部分名称的字符串,例如:<code class="docutils literal"><span class="pre">“(UID</span> <span class="pre">BODY [TEXT])” t1>。</span></code></span><span class="yiyi-st" id="yiyi-119">返回的数据是消息部分包络和数据的元组。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.getacl"><span class="yiyi-st" id="yiyi-120"><code class="descclassname">IMAP4.</code><code class="descname">getacl</code><span class="sig-paren">(</span><em>mailbox</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-121">获取<em>邮箱</em>的<code class="docutils literal"><span class="pre">ACL</span></code>。</span><span class="yiyi-st" id="yiyi-122">该方法是非标准的,但由<code class="docutils literal"><span class="pre">Cyrus</span></code>服务器支持。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.getannotation"><span class="yiyi-st" id="yiyi-123"><code class="descclassname">IMAP4.</code><code class="descname">getannotation</code><span class="sig-paren">(</span><em>mailbox</em>, <em>entry</em>, <em>attribute</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-124">检索<em>邮箱</em>的指定<code class="docutils literal"><span class="pre">ANNOTATION</span></code>。</span><span class="yiyi-st" id="yiyi-125">该方法是非标准的,但由<code class="docutils literal"><span class="pre">Cyrus</span></code>服务器支持。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.getquota"><span class="yiyi-st" id="yiyi-126"><code class="descclassname">IMAP4.</code><code class="descname">getquota</code><span class="sig-paren">(</span><em>root</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-127">获取<code class="docutils literal"><span class="pre">quota</span></code> <em>root</em>的资源使用和限制。</span><span class="yiyi-st" id="yiyi-128">此方法是rfc2087中定义的IMAP4 QUOTA扩展的一部分。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.getquotaroot"><span class="yiyi-st" id="yiyi-129"><code class="descclassname">IMAP4.</code><code class="descname">getquotaroot</code><span class="sig-paren">(</span><em>mailbox</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-130">获取名为<em>邮箱</em>的<code class="docutils literal"><span class="pre">quota</span></code> <code class="docutils literal"><span class="pre">roots</span></code>列表。</span><span class="yiyi-st" id="yiyi-131">此方法是rfc2087中定义的IMAP4 QUOTA扩展的一部分。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.list"><span class="yiyi-st" id="yiyi-132"><code class="descclassname">IMAP4.</code><code class="descname">list</code><span class="sig-paren">(</span><span class="optional">[</span><em>directory</em><span class="optional">[</span>, <em>pattern</em><span class="optional">]</span><span class="optional">]</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-133">在匹配<em>模式</em>的<em>目录</em>中列出邮箱名称。</span><span class="yiyi-st" id="yiyi-134"><em>目录</em>默认为顶级邮件文件夹,<em>模式</em>默认为匹配任何内容。</span><span class="yiyi-st" id="yiyi-135">返回的数据包含<code class="docutils literal"><span class="pre">LIST</span></code>响应的列表。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.login"><span class="yiyi-st" id="yiyi-136"><code class="descclassname">IMAP4.</code><code class="descname">login</code><span class="sig-paren">(</span><em>user</em>, <em>password</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-137">使用明文密码识别客户端。</span><span class="yiyi-st" id="yiyi-138"><em>密码</em>将被引用。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.login_cram_md5"><span class="yiyi-st" id="yiyi-139"><code class="descclassname">IMAP4.</code><code class="descname">login_cram_md5</code><span class="sig-paren">(</span><em>user</em>, <em>password</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-140">在识别客户端以保护密码时强制使用<code class="docutils literal"><span class="pre">CRAM-MD5</span></code>身份验证。</span><span class="yiyi-st" id="yiyi-141">仅当服务器<code class="docutils literal"><span class="pre">CAPABILITY</span></code>响应包括短语<code class="docutils literal"><span class="pre">AUTH=CRAM-MD5</span></code>时才起作用。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.logout"><span class="yiyi-st" id="yiyi-142"><code class="descclassname">IMAP4.</code><code class="descname">logout</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-143">关闭与服务器的连接。</span><span class="yiyi-st" id="yiyi-144">返回服务器<code class="docutils literal"><span class="pre">BYE</span></code>响应。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.lsub"><span class="yiyi-st" id="yiyi-145"><code class="descclassname">IMAP4.</code><code class="descname">lsub</code><span class="sig-paren">(</span><em>directory='""'</em>, <em>pattern='*'</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-146">在目录匹配模式中列出预订的邮箱名称。</span><span class="yiyi-st" id="yiyi-147"><em>目录</em>默认为顶级目录,<em>模式</em>默认为与任何邮箱匹配。</span><span class="yiyi-st" id="yiyi-148">返回的数据是消息部分包络和数据的元组。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.myrights"><span class="yiyi-st" id="yiyi-149"><code class="descclassname">IMAP4.</code><code class="descname">myrights</code><span class="sig-paren">(</span><em>mailbox</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-150">显示邮箱的ACL(即</span><span class="yiyi-st" id="yiyi-151">我对邮箱的权限)。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.namespace"><span class="yiyi-st" id="yiyi-152"><code class="descclassname">IMAP4.</code><code class="descname">namespace</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-153">返回RFC2342中定义的IMAP命名空间。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.noop"><span class="yiyi-st" id="yiyi-154"><code class="descclassname">IMAP4.</code><code class="descname">noop</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-155">发送<code class="docutils literal"><span class="pre">NOOP</span></code>到服务器。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.open"><span class="yiyi-st" id="yiyi-156"><code class="descclassname">IMAP4.</code><code class="descname">open</code><span class="sig-paren">(</span><em>host</em>, <em>port</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-157">在<em>主机</em>处打开<em>端口</em>的套接字。</span><span class="yiyi-st" id="yiyi-158">此方法由<a class="reference internal" href="#imaplib.IMAP4" title="imaplib.IMAP4"><code class="xref py py-class docutils literal"><span class="pre">IMAP4</span></code></a>构造函数隐式调用。</span><span class="yiyi-st" id="yiyi-159">由此方法建立的连接对象将在<a class="reference internal" href="#imaplib.IMAP4.read" title="imaplib.IMAP4.read"><code class="xref py py-meth docutils literal"><span class="pre">IMAP4.read()</span></code></a>,<a class="reference internal" href="#imaplib.IMAP4.readline" title="imaplib.IMAP4.readline"><code class="xref py py-meth docutils literal"><span class="pre">IMAP4.readline()</span></code></a>,<a class="reference internal" href="#imaplib.IMAP4.send" title="imaplib.IMAP4.send"><code class="xref py py-meth docutils literal"><span class="pre">IMAP4.send()</span></code></a> ,和<a class="reference internal" href="#imaplib.IMAP4.shutdown" title="imaplib.IMAP4.shutdown"><code class="xref py py-meth docutils literal"><span class="pre">IMAP4.shutdown()</span></code></a>方法中被使用。</span><span class="yiyi-st" id="yiyi-160">您可以覆盖此方法。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.partial"><span class="yiyi-st" id="yiyi-161"><code class="descclassname">IMAP4.</code><code class="descname">partial</code><span class="sig-paren">(</span><em>message_num</em>, <em>message_part</em>, <em>start</em>, <em>length</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-162">获取消息的截断部分。</span><span class="yiyi-st" id="yiyi-163">返回的数据是消息部分包络和数据的元组。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.proxyauth"><span class="yiyi-st" id="yiyi-164"><code class="descclassname">IMAP4.</code><code class="descname">proxyauth</code><span class="sig-paren">(</span><em>user</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-165">假设身份验证为<em>用户</em>。</span><span class="yiyi-st" id="yiyi-166">允许授权管理员代理到任何用户的邮箱。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.read"><span class="yiyi-st" id="yiyi-167"><code class="descclassname">IMAP4.</code><code class="descname">read</code><span class="sig-paren">(</span><em>size</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-168">从远程服务器读取<em>大小</em>字节。</span><span class="yiyi-st" id="yiyi-169">您可以覆盖此方法。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.readline"><span class="yiyi-st" id="yiyi-170"><code class="descclassname">IMAP4.</code><code class="descname">readline</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-171">从远程服务器读取一行。</span><span class="yiyi-st" id="yiyi-172">您可以覆盖此方法。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.recent"><span class="yiyi-st" id="yiyi-173"><code class="descclassname">IMAP4.</code><code class="descname">recent</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-174">提示服务器进行更新。</span><span class="yiyi-st" id="yiyi-175">返回的数据为<code class="docutils literal"><span class="pre">None</span></code>如果没有新消息,则返回<code class="docutils literal"><span class="pre">RECENT</span></code>响应的值。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.rename"><span class="yiyi-st" id="yiyi-176"><code class="descclassname">IMAP4.</code><code class="descname">rename</code><span class="sig-paren">(</span><em>oldmailbox</em>, <em>newmailbox</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-177">将名为<em>oldmailbox</em>的邮箱重命名为<em>newmailbox</em>。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.response"><span class="yiyi-st" id="yiyi-178"><code class="descclassname">IMAP4.</code><code class="descname">response</code><span class="sig-paren">(</span><em>code</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-179">返回响应数据<em>代码</em>(如果接收到),或<code class="docutils literal"><span class="pre">None</span></code>。</span><span class="yiyi-st" id="yiyi-180">返回给定的代码,而不是通常的类型。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.search"><span class="yiyi-st" id="yiyi-181"><code class="descclassname">IMAP4.</code><code class="descname">search</code><span class="sig-paren">(</span><em>charset</em>, <em>criterion</em><span class="optional">[</span>, <em>...</em><span class="optional">]</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-182">搜索邮箱以查找匹配的邮件。</span><span class="yiyi-st" id="yiyi-183"><em>字符集</em>可以是<code class="docutils literal"><span class="pre">None</span></code>,在这种情况下,在向服务器的请求中将不指定<code class="docutils literal"><span class="pre">CHARSET</span></code>。</span><span class="yiyi-st" id="yiyi-184">IMAP协议要求指定至少一个标准;当服务器返回错误时将引发异常。</span><span class="yiyi-st" id="yiyi-185">使用<a class="reference internal" href="#imaplib.IMAP4.enable" title="imaplib.IMAP4.enable"><code class="xref py py-meth docutils literal"><span class="pre">enable()</span></code></a>命令启用<code class="docutils literal"><span class="pre">UTF8=ACCEPT</span></code>功能时,<em>字符集</em>必须为<code class="docutils literal"><span class="pre">None</span></code></span></p><p><span class="yiyi-st" id="yiyi-186">例:</span></p><div class="highlight-python3"><div class="highlight"><pre><span></span><span class="c1"># M is a connected IMAP4 instance...</span>
|
||
<span class="n">typ</span><span class="p">,</span> <span class="n">msgnums</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="s1">'FROM'</span><span class="p">,</span> <span class="s1">'"LDJ"'</span><span class="p">)</span>
|
||
|
||
<span class="c1"># or:</span>
|
||
<span class="n">typ</span><span class="p">,</span> <span class="n">msgnums</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="s1">'(FROM "LDJ")'</span><span class="p">)</span>
|
||
</pre></div></div></dd></dl><dl class="method"><dt id="imaplib.IMAP4.select"><span class="yiyi-st" id="yiyi-187"><code class="descclassname">IMAP4.</code><code class="descname">select</code><span class="sig-paren">(</span><em>mailbox='INBOX'</em>, <em>readonly=False</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-188">选择邮箱。</span><span class="yiyi-st" id="yiyi-189">返回的数据是<em>邮箱</em>(<code class="docutils literal"><span class="pre">EXISTS</span></code>响应)中的邮件计数。</span><span class="yiyi-st" id="yiyi-190">默认的<em>邮箱</em>是<code class="docutils literal"><span class="pre">'INBOX'</span></code>。</span><span class="yiyi-st" id="yiyi-191">如果设置了<em>readonly</em>标志,则不允许修改邮箱。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.send"><span class="yiyi-st" id="yiyi-192"><code class="descclassname">IMAP4.</code><code class="descname">send</code><span class="sig-paren">(</span><em>data</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-193">将<code class="docutils literal"><span class="pre">data</span></code>发送到远程服务器。</span><span class="yiyi-st" id="yiyi-194">您可以覆盖此方法。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.setacl"><span class="yiyi-st" id="yiyi-195"><code class="descclassname">IMAP4.</code><code class="descname">setacl</code><span class="sig-paren">(</span><em>mailbox</em>, <em>who</em>, <em>what</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-196">为<em>邮箱</em>设置<code class="docutils literal"><span class="pre">ACL</span></code>。</span><span class="yiyi-st" id="yiyi-197">该方法是非标准的,但由<code class="docutils literal"><span class="pre">Cyrus</span></code>服务器支持。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.setannotation"><span class="yiyi-st" id="yiyi-198"><code class="descclassname">IMAP4.</code><code class="descname">setannotation</code><span class="sig-paren">(</span><em>mailbox</em>, <em>entry</em>, <em>attribute</em><span class="optional">[</span>, <em>...</em><span class="optional">]</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-199">为<em>邮箱</em>设置<code class="docutils literal"><span class="pre">ANNOTATION</span></code>。</span><span class="yiyi-st" id="yiyi-200">该方法是非标准的,但由<code class="docutils literal"><span class="pre">Cyrus</span></code>服务器支持。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.setquota"><span class="yiyi-st" id="yiyi-201"><code class="descclassname">IMAP4.</code><code class="descname">setquota</code><span class="sig-paren">(</span><em>root</em>, <em>limits</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-202">设置<code class="docutils literal"><span class="pre">quota</span></code> <em>根</em>的资源<em>限制</em>。</span><span class="yiyi-st" id="yiyi-203">此方法是rfc2087中定义的IMAP4 QUOTA扩展的一部分。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.shutdown"><span class="yiyi-st" id="yiyi-204"><code class="descclassname">IMAP4.</code><code class="descname">shutdown</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-205">在<code class="docutils literal"><span class="pre">open</span></code>中建立关闭连接。</span><span class="yiyi-st" id="yiyi-206">此方法由<a class="reference internal" href="#imaplib.IMAP4.logout" title="imaplib.IMAP4.logout"><code class="xref py py-meth docutils literal"><span class="pre">IMAP4.logout()</span></code></a>隐式调用。</span><span class="yiyi-st" id="yiyi-207">您可以覆盖此方法。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.socket"><span class="yiyi-st" id="yiyi-208"><code class="descclassname">IMAP4.</code><code class="descname">socket</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-209">返回用于连接到服务器的套接字实例。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.sort"><span class="yiyi-st" id="yiyi-210"><code class="descclassname">IMAP4.</code><code class="descname">sort</code><span class="sig-paren">(</span><em>sort_criteria</em>, <em>charset</em>, <em>search_criterion</em><span class="optional">[</span>, <em>...</em><span class="optional">]</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-211"><code class="docutils literal"><span class="pre">sort</span></code>命令是对结果进行排序语义的<code class="docutils literal"><span class="pre">search</span></code>的变体。</span><span class="yiyi-st" id="yiyi-212">返回的数据包含空格分隔的匹配消息号列表。</span></p><p><span class="yiyi-st" id="yiyi-213">Sort在<em>search_criterion</em>参数之前有两个参数; <em>sort_criteria</em>的括号列表,以及搜索<em>字符集</em>。</span><span class="yiyi-st" id="yiyi-214">请注意,与<code class="docutils literal"><span class="pre">search</span></code>不同,搜索<em>字符集</em>参数是必需的。</span><span class="yiyi-st" id="yiyi-215">还有一个<code class="docutils literal"><span class="pre">uid</span> <span class="pre">sort</span></code>命令,对应于<code class="docutils literal"><span class="pre">sort</span></code>的方式<code class="docutils literal"><span class="pre">uid <span class="pre">搜索</span></span></code>对应于<code class="docutils literal"><span class="pre">search</span></code>。</span><span class="yiyi-st" id="yiyi-216"><code class="docutils literal"><span class="pre">sort</span></code>命令首先使用charset参数搜索邮箱中与给定搜索条件匹配的邮件,以解释搜索条件中的字符串。</span><span class="yiyi-st" id="yiyi-217">然后它返回匹配消息的数量。</span></p><p><span class="yiyi-st" id="yiyi-218">这是一个<code class="docutils literal"><span class="pre">IMAP4rev1</span></code>扩展命令。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.starttls"><span class="yiyi-st" id="yiyi-219"><code class="descclassname">IMAP4.</code><code class="descname">starttls</code><span class="sig-paren">(</span><em>ssl_context=None</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-220">发送<code class="docutils literal"><span class="pre">STARTTLS</span></code>命令。</span><span class="yiyi-st" id="yiyi-221"><em>ssl_context</em>参数是可选的,应为<a class="reference internal" href="ssl.html#ssl.SSLContext" title="ssl.SSLContext"><code class="xref py py-class docutils literal"><span class="pre">ssl.SSLContext</span></code></a>对象。</span><span class="yiyi-st" id="yiyi-222">这将启用IMAP连接上的加密。</span><span class="yiyi-st" id="yiyi-223">有关最佳做法,请参阅<a class="reference internal" href="ssl.html#ssl-security"><span>Security considerations</span></a>。</span></p><div class="versionadded"><p><span class="yiyi-st" id="yiyi-224"><span class="versionmodified">版本3.2中的新功能。</span></span></p></div><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-225"><span class="versionmodified">在版本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"><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"><span class="pre">ssl.HAS_SNI</span></code></a>)。</span></p></div></dd></dl><dl class="method"><dt id="imaplib.IMAP4.status"><span class="yiyi-st" id="yiyi-226"><code class="descclassname">IMAP4.</code><code class="descname">status</code><span class="sig-paren">(</span><em>mailbox</em>, <em>names</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-227">请求<em>邮箱的命名状态条件</em>。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.store"><span class="yiyi-st" id="yiyi-228"><code class="descclassname">IMAP4.</code><code class="descname">store</code><span class="sig-paren">(</span><em>message_set</em>, <em>command</em>, <em>flag_list</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-229">更改邮箱中邮件的标志位置。</span><span class="yiyi-st" id="yiyi-230"><em>命令</em>由<span class="target" id="index-6"></span> <a class="rfc reference external" href="https://tools.ietf.org/html/rfc2060.html"><strong>RFC 2060</strong></a>的6.4.6节指定为“FLAGS”,“+ FLAGS”或“-FLAGS” ,可选择使用后缀“.SILENT”。</span></p><p><span class="yiyi-st" id="yiyi-231">例如,要对所有消息设置删除标志:</span></p><div class="highlight-python3"><div class="highlight"><pre><span></span><span class="n">typ</span><span class="p">,</span> <span class="n">data</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="s1">'ALL'</span><span class="p">)</span>
|
||
<span class="k">for</span> <span class="n">num</span> <span class="ow">in</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">():</span>
|
||
<span class="n">M</span><span class="o">.</span><span class="n">store</span><span class="p">(</span><span class="n">num</span><span class="p">,</span> <span class="s1">'+FLAGS'</span><span class="p">,</span> <span class="s1">'</span><span class="se">\\</span><span class="s1">Deleted'</span><span class="p">)</span>
|
||
<span class="n">M</span><span class="o">.</span><span class="n">expunge</span><span class="p">()</span>
|
||
</pre></div></div></dd></dl><dl class="method"><dt id="imaplib.IMAP4.subscribe"><span class="yiyi-st" id="yiyi-232"><code class="descclassname">IMAP4.</code><code class="descname">subscribe</code><span class="sig-paren">(</span><em>mailbox</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-233">订阅新邮箱。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.thread"><span class="yiyi-st" id="yiyi-234"><code class="descclassname">IMAP4.</code><code class="descname">thread</code><span class="sig-paren">(</span><em>threading_algorithm</em>, <em>charset</em>, <em>search_criterion</em><span class="optional">[</span>, <em>...</em><span class="optional">]</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-235"><code class="docutils literal"><span class="pre">thread</span></code>命令是<code class="docutils literal"><span class="pre">search</span></code>的一种变体,具有线程语义的结果。</span><span class="yiyi-st" id="yiyi-236">返回的数据包含空格分隔的线程成员列表。</span></p><p><span class="yiyi-st" id="yiyi-237">线程成员由零个或多个消息号组成,由空格分隔,表示后续的父级和子级。</span></p><p><span class="yiyi-st" id="yiyi-238">线程在<em>search_criterion</em>参数之前有两个参数; a <em>threading_algorithm</em>和搜索<em>字符集</em>。</span><span class="yiyi-st" id="yiyi-239">请注意,与<code class="docutils literal"><span class="pre">search</span></code>不同,搜索<em>字符集</em>参数是必需的。</span><span class="yiyi-st" id="yiyi-240">还有一个<code class="docutils literal"><span class="pre">uid</span> <span class="pre">线程</span></code>命令对应<code class="docutils literal"><span class="pre">thread</span></code>的方式<code class="docutils literal"><span class="pre">uid <span class="pre">搜索</span></span></code>对应于<code class="docutils literal"><span class="pre">search</span></code>。</span><span class="yiyi-st" id="yiyi-241"><code class="docutils literal"><span class="pre">thread</span></code>命令首先使用charset参数搜索邮箱中与给定搜索条件匹配的邮件,以解释搜索条件中的字符串。</span><span class="yiyi-st" id="yiyi-242">然后它返回根据指定的线程算法线程化的匹配消息。</span></p><p><span class="yiyi-st" id="yiyi-243">这是一个<code class="docutils literal"><span class="pre">IMAP4rev1</span></code>扩展命令。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.uid"><span class="yiyi-st" id="yiyi-244"><code class="descclassname">IMAP4.</code><code class="descname">uid</code><span class="sig-paren">(</span><em>command</em>, <em>arg</em><span class="optional">[</span>, <em>...</em><span class="optional">]</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-245">对由UID标识的消息执行命令args,而不是消息号。</span><span class="yiyi-st" id="yiyi-246">返回适合于命令的响应。</span><span class="yiyi-st" id="yiyi-247">必须提供至少一个参数;如果没有提供,服务器将返回一个错误,并将引发异常。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.unsubscribe"><span class="yiyi-st" id="yiyi-248"><code class="descclassname">IMAP4.</code><code class="descname">unsubscribe</code><span class="sig-paren">(</span><em>mailbox</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-249">取消订阅旧邮箱。</span></p></dd></dl><dl class="method"><dt id="imaplib.IMAP4.xatom"><span class="yiyi-st" id="yiyi-250"><code class="descclassname">IMAP4.</code><code class="descname">xatom</code><span class="sig-paren">(</span><em>name</em><span class="optional">[</span>, <em>...</em><span class="optional">]</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-251">允许服务器在<code class="docutils literal"><span class="pre">CAPABILITY</span></code>响应中通知的简单扩展命令。</span></p></dd></dl><p><span class="yiyi-st" id="yiyi-252">以下属性在<a class="reference internal" href="#imaplib.IMAP4" title="imaplib.IMAP4"><code class="xref py py-class docutils literal"><span class="pre">IMAP4</span></code></a>的实例上定义:</span></p><dl class="attribute"><dt id="imaplib.IMAP4.PROTOCOL_VERSION"><span class="yiyi-st" id="yiyi-253"><code class="descclassname">IMAP4.</code><code class="descname">PROTOCOL_VERSION</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-254">来自服务器的<code class="docutils literal"><span class="pre">CAPABILITY</span></code>响应中最新支持的协议。</span></p></dd></dl><dl class="attribute"><dt id="imaplib.IMAP4.debug"><span class="yiyi-st" id="yiyi-255"><code class="descclassname">IMAP4.</code><code class="descname">debug</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-256">控制调试输出的整数值。</span><span class="yiyi-st" id="yiyi-257">初始值取自模块变量<code class="docutils literal"><span class="pre">Debug</span></code>。</span><span class="yiyi-st" id="yiyi-258">大于三的值跟踪每个命令。</span></p></dd></dl><dl class="attribute"><dt id="imaplib.IMAP4.utf8_enabled"><span class="yiyi-st" id="yiyi-259"><code class="descclassname">IMAP4.</code><code class="descname">utf8_enabled</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-260">Boolean value that is normally <code class="docutils literal"><span class="pre">False</span></code>, but is set to <code class="docutils literal"><span class="pre">True</span></code> if an <a class="reference internal" href="#imaplib.IMAP4.enable" title="imaplib.IMAP4.enable"><code class="xref py py-meth docutils literal"><span class="pre">enable()</span></code></a> command is successfully issued for the <code class="docutils literal"><span class="pre">UTF8=ACCEPT</span></code> capability.</span></p><div class="versionadded"><p><span class="yiyi-st" id="yiyi-261"><span class="versionmodified">版本3.5中的新功能。</span></span></p></div></dd></dl></div><div class="section" id="imap4-example"><h2><span class="yiyi-st" id="yiyi-262">21.15.2.</span><span class="yiyi-st" id="yiyi-263">IMAP4示例</span></h2><p><span class="yiyi-st" id="yiyi-264">下面是一个打开邮箱并检索和打印所有邮件的最小示例(无错误检查):</span></p><div class="highlight-python3"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">getpass</span><span class="o">,</span> <span class="nn">imaplib</span>
|
||
|
||
<span class="n">M</span> <span class="o">=</span> <span class="n">imaplib</span><span class="o">.</span><span class="n">IMAP4</span><span class="p">()</span>
|
||
<span class="n">M</span><span class="o">.</span><span class="n">login</span><span class="p">(</span><span class="n">getpass</span><span class="o">.</span><span class="n">getuser</span><span class="p">(),</span> <span class="n">getpass</span><span class="o">.</span><span class="n">getpass</span><span class="p">())</span>
|
||
<span class="n">M</span><span class="o">.</span><span class="n">select</span><span class="p">()</span>
|
||
<span class="n">typ</span><span class="p">,</span> <span class="n">data</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="s1">'ALL'</span><span class="p">)</span>
|
||
<span class="k">for</span> <span class="n">num</span> <span class="ow">in</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">():</span>
|
||
<span class="n">typ</span><span class="p">,</span> <span class="n">data</span> <span class="o">=</span> <span class="n">M</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="n">num</span><span class="p">,</span> <span class="s1">'(RFC822)'</span><span class="p">)</span>
|
||
<span class="nb">print</span><span class="p">(</span><span class="s1">'Message </span><span class="si">%s</span><span class="se">\n</span><span class="si">%s</span><span class="se">\n</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">num</span><span class="p">,</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">]))</span>
|
||
<span class="n">M</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
|
||
<span class="n">M</span><span class="o">.</span><span class="n">logout</span><span class="p">()</span>
|
||
</pre></div></div></div></div></div> |