<code>email.parser.</code><code>Parser()的parsestr()和parse()方法都可以用来从原始邮件文件中提取邮件头信息。这两个方法的区别就parsestr处理的是字符串对象,parse处理的是文件对象。</code>
<code> 让我们通过两个例子来了解这两个方法的使用。先来看一封邮件的原始信息的一部分:</code>
<code>cat </code><code>/</code><code>tmp</code><code>/</code><code>email_test1.txt</code>
<code>date: Wed, </code><code>16</code> <code>Nov </code><code>2016</code> <code>16</code><code>:</code><code>04</code><code>:</code><code>44</code> <code>+</code><code>0800</code>
<code>From: </code><code>3456789</code> <code><</code><code>3456789</code><code>@qq.com></code>
<code>To: </code><code>1234567</code> <code><</code><code>1234567</code><code>@qq.com></code>
<code>Cc: </code><code>23456780</code> <code><</code><code>23456780</code><code>@qq.com></code>
<code>Reply</code><code>-</code><code>To: </code><code>3456789</code> <code><</code><code>3456789</code><code>@qq.com></code>
<code>Subject: email test!</code>
<code>X</code><code>-</code><code>Priority: </code><code>3</code>
<code>X</code><code>-</code><code>Has</code><code>-</code><code>Attach: no</code>
<code>X</code><code>-</code><code>Mailer: Foxmail </code><code>7.0</code><code>.</code><code>1.91</code><code>[cn]</code>
<code>Mime</code><code>-</code><code>Version: </code><code>1.0</code>
<code>Message</code><code>-</code><code>ID</code><code>: <</code><code>201611161604440653250</code><code>@qq.com></code>
<code>Content</code><code>-</code><code>Type</code><code>: multipart</code><code>/</code><code>alternative;</code>
<code> </code><code>boundary</code><code>=</code><code>"----=_001_NextPart245273401224_=----"</code>
例1:通过parsestr提取邮件头
<code>#!/usr/bin/python</code>
<code>import</code> <code>os</code>
<code>from</code> <code>email.parser </code><code>import</code> <code>Parser</code>
<code>def</code> <code>read_mail(path): </code>
<code> </code><code>if</code> <code>os.path.exists(path): </code>
<code> </code><code>with </code><code>open</code><code>(path) as fp: </code>
<code> </code><code>email</code><code>=</code><code>fp.read()</code>
<code> </code><code>return</code> <code>email </code>
<code> </code><code>else</code><code>: </code>
<code> </code><code>print</code> <code>"file not exist!"</code>
<code>raw_email</code><code>=</code><code>read_mail(</code><code>'/tmp/email_test1.txt'</code><code>) </code><code>#将邮件读到一个字符串里面</code>
<code>headers </code><code>=</code><code>Parser().parsestr(raw_email) </code><code>#经过parsestr处理过后生成一个字典</code>
<code>print</code> <code>'Cc: %s'</code> <code>%</code> <code>headers[</code><code>'Cc'</code><code>]</code>
<code>print</code> <code>'To: %s'</code> <code>%</code> <code>headers[</code><code>'to'</code><code>]</code>
<code>print</code> <code>'From: %s'</code> <code>%</code> <code>headers[</code><code>'from'</code><code>]</code>
<code>print</code> <code>'Subject: %s'</code> <code>%</code> <code>headers[</code><code>'subject'</code><code>]</code>
例2:通过parse提取邮件关
<code>headers </code><code>=</code> <code>Parser().parse(</code><code>open</code><code>(</code><code>'/tmp/email_test1.txt'</code><code>, </code><code>'r'</code><code>))</code>
两个例子的返回的结果都是一样的:
这样我们就完成了邮件头部信息的提取!
本文转自 emma_cql 51CTO博客,原文链接:http://blog.51cto.com/chenql/1873770