天天看点

python常用模块email----从原始邮件中提取邮件头信息

  <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>&lt;</code><code>3456789</code><code>@qq.com&gt;</code>

<code>To: </code><code>1234567</code> <code>&lt;</code><code>1234567</code><code>@qq.com&gt;</code>

<code>Cc: </code><code>23456780</code> <code>&lt;</code><code>23456780</code><code>@qq.com&gt;</code>

<code>Reply</code><code>-</code><code>To: </code><code>3456789</code> <code>&lt;</code><code>3456789</code><code>@qq.com&gt;</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>: &lt;</code><code>201611161604440653250</code><code>@qq.com&gt;</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