<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