python 获取E-mail中的信息
2009-09-17 16:27
323 查看
E-mail主要由邮件头和邮件体两部分组成。
邮件头中的内容和我们寄信时写在信封上的内容大同小意,当然这里也包含了很多路过的“邮局”的信息了。
邮件体中的内容就是我们写的信或者包裹。
python自身包含了email模块处理可以快速的处理E-mail中的信息
import email
#打开一个文件
fp = open('email.eml', 'r')
#创建email实例
msg = email.message_from_file(fp)
#现在我们就可以很简单的取出我们想要的邮件头信息
subject = msg.get('subject')
from = msg.get('from')
to = msg.get('to')
现在我们已经得到了邮件的主题,发件人和邮件人的信息
可是我们怎么取得邮件中正文信息和附件信息呢?
这些信息我们就需要遍历邮件内容来获取了。
for part in msg.walk():
if part.is_multipart():
continue
#获取内容类型
content_type = part.get_content_type()
#text/plain类型说明是文本,有时邮件格式不规范会写为text
if ('text/plain' == content_type
or 'text' == content_type):
content = part.get_payload()
#application/octet-stream说明是附件,这里假设邮件里只包含一个附件
if ('application/octet-stream' == content_type):
file = part.get_payload()
现在我们已经把邮件中的主要信息取出来了。
但是为什么取出来的信息都看不明白呢?
例如
To: "=?gb2312?B?uu/X0w==?=" <ape@ape.com>
这是因为邮件在传送过程中使用base64进行了编码操作
“=?gb2312?B?uu/X0w==?=”这段字符串是使用bae64进行编码后的gb2312字符集的字符串
现在我们看看怎么解析这些数据
str = '=?gb2312?B?uu/X0w==?='
list = email.header.decode_header(str)
#这时list内容为[[('/xba/xef/xd7/xd3', 'gb2312')]]
to = list[0][0].decode(list[0][1])
#这时to里的内容为u'/u7334/u5b50'即utf-8字符集中的’猴子’两字
有时解码时会遇到不能解析的字符,这时就要给decode函数增加一个参数了
to = list[0][0].decode(list[0][1], 'ignore')
这时无法解析的字符将被忽略
现在我们已经可以得到信息中的中文信息。
但是有些信件不存储字符集怎么办呢?
现在我们用http://chardet.feedparser.org/里面的chardet库提供的功能对编码进行探测
import chardet
str = '/xba/xef/xd7/xd3'
chardet.detect(str)
#返回的结果
{'confidence': 0.98999999999999999, 'encoding': 'GB2312'}
经过以上的步骤我们就可以比较正确的获取一封信件的内容了。
邮件头中的内容和我们寄信时写在信封上的内容大同小意,当然这里也包含了很多路过的“邮局”的信息了。
邮件体中的内容就是我们写的信或者包裹。
python自身包含了email模块处理可以快速的处理E-mail中的信息
import email
#打开一个文件
fp = open('email.eml', 'r')
#创建email实例
msg = email.message_from_file(fp)
#现在我们就可以很简单的取出我们想要的邮件头信息
subject = msg.get('subject')
from = msg.get('from')
to = msg.get('to')
现在我们已经得到了邮件的主题,发件人和邮件人的信息
可是我们怎么取得邮件中正文信息和附件信息呢?
这些信息我们就需要遍历邮件内容来获取了。
for part in msg.walk():
if part.is_multipart():
continue
#获取内容类型
content_type = part.get_content_type()
#text/plain类型说明是文本,有时邮件格式不规范会写为text
if ('text/plain' == content_type
or 'text' == content_type):
content = part.get_payload()
#application/octet-stream说明是附件,这里假设邮件里只包含一个附件
if ('application/octet-stream' == content_type):
file = part.get_payload()
现在我们已经把邮件中的主要信息取出来了。
但是为什么取出来的信息都看不明白呢?
例如
To: "=?gb2312?B?uu/X0w==?=" <ape@ape.com>
这是因为邮件在传送过程中使用base64进行了编码操作
“=?gb2312?B?uu/X0w==?=”这段字符串是使用bae64进行编码后的gb2312字符集的字符串
现在我们看看怎么解析这些数据
str = '=?gb2312?B?uu/X0w==?='
list = email.header.decode_header(str)
#这时list内容为[[('/xba/xef/xd7/xd3', 'gb2312')]]
to = list[0][0].decode(list[0][1])
#这时to里的内容为u'/u7334/u5b50'即utf-8字符集中的’猴子’两字
有时解码时会遇到不能解析的字符,这时就要给decode函数增加一个参数了
to = list[0][0].decode(list[0][1], 'ignore')
这时无法解析的字符将被忽略
现在我们已经可以得到信息中的中文信息。
但是有些信件不存储字符集怎么办呢?
现在我们用http://chardet.feedparser.org/里面的chardet库提供的功能对编码进行探测
import chardet
str = '/xba/xef/xd7/xd3'
chardet.detect(str)
#返回的结果
{'confidence': 0.98999999999999999, 'encoding': 'GB2312'}
经过以上的步骤我们就可以比较正确的获取一封信件的内容了。
相关文章推荐
- Python基础-获取对象信息的常用函数
- python获取设备硬件信息
- python 爬虫获取网站信息(二)
- python 学习笔记 12 -- 写一个脚本获取城市天气信息
- Python脚本如何获取当前环节和用户等信息
- 使用python获取CPU和内存信息的思路与实现(linux系统)
- Python获取电脑硬件信息及状态的实现方法
- 使用python获取CPU和内存信息的思路与实现(linux系统)
- 使用Python获取apk信息(包名、版本号和版本名称等信息)
- Python爬虫模拟登录京东获取个人信息
- 跨平台的系统信息获取python库 - psutil
- 使用python获取CPU和内存信息(linux系统)
- python-获取操作系统信息
- 如何用Python自动登录路由器!获取信息!请勿用于非法用途!
- Python 实例分析 - 获取MP3歌曲的Tag信息
- Python 获取CPU基础信息(Linux 版本)
- python获取实时股票信息
- python---get请求https的页面,并获取html返回的内容信息
- python实现根据用户输入从电影网站获取影片信息的方法
- 一个用于踩点获取信息的python脚本