eml文件

解析eml文件使用了eml_parser模块

安装:

pip install eml_parser

使用:

  1. 获得eml实例
import eml_parser
with open("eml文件的路径",'rb') as f:a=f.read()
eml = eml_parser.eml_parser.decode_email_b(a,True,True)
#decode_email_b方法
#第一个参数是eml文件二进制读出来的内容
#第二个参数表示邮件解析返回的数据结构里是否包含邮件的原始内容,也就是html内容,我这里选True,这样内容可以直接放到网页中显示。
#第三个参数表示解析返回的数据结构中是否包含附件内容。
  1. 邮件正文部分提取
    eml[“body”]是一个列表,列表里每一项按显示类型分,这里我选择获得了text/html类型的正文文本
for i in eml["body"]:#text/html是带html标签,可以直接放到网页里面展示    #还有类型text/plain,正文部分的文字信息if i["content_type"] == "text/html":   #下两行是对html样式进行了调整以适配前端显示,可自行调整body = i["content"].replace('\n','').replace('position:absolute;','')              body = re.sub('body\s*{.*?}', '', body)        break

3.邮件标题、收件人、发件人信息

title = eml["header"]["subject"]
reciver = ','.join(eml["header"]["to"])
sender = eml["header"]["from"]

4.附件提取
提取出来的附件内容是经过base64编码的,所以先解码,然后直接二进制写入文件

import base64
if eml.get('attachment'):for i in eml['attachment']:x=base64.b64decode(i['raw'])        with open(i['filename'], 'wb') as f:            f.write(x)

pst文件

安装

linux系统上安装readpst
我这里是ubuntu系统,使用如下安装命令
sudo apt install readpst

使用

提取pst文件的方法是使用readpst命令将pst文件解析成eml文件,再对每一个eml文件进行信息的提取。

#参数pstfile是pst文件存放的路径
def extract_pst(pstfile):pstfile_path = '/'. join(pstfile.split('/')[: -1])#pstfile_path是提取出的eml文件需要存放的目标文件夹commend = 'sudo readpst -D -S -M -b -j 10 -o {} {} '.format(pstfile_path, pstfile)logger.info(commend)child = pexpect.spawn(commend)pwd = SYSTEMPWD#SYSTEMPWD设为你linux系统的用户密码child.sendline(pwd)time.sleep(0.3)#执行readpst命令后目标文件夹下多了一个outlook数据文件的文件夹,eml就保存在其中#以下列出每一个eml文件的路径,并作为列表返回email_list = []try:file_list = os.listdir(pstfile_path)logger.info(str(file_list))logger.info(pstfile_path)for i in file_list:if os.path.isdir(pstfile_path+'/'+i):for root,dirs,files in os.walk(pstfile_path+'/'+i):for name in files:email_list.append(os.path.join(root,name))except FileNotFoundError:logger.error("FileNotFoundError")return Nonereturn email_list

此时我们已经有了所有eml文件的路径,再通过上面提取eml信息的方法进行邮件信息的提取即可

MSG文件

我这里只找到提取普通msg文件的方法,保存为Unicode编码的msg文件暂未找到方法

安装

pip install extract_msg

使用

#参数msgfile是msg文件的保存路径
#参数extract_path是提取出的附件的保存路径
import extract_msg
def extract_msgs(msgfile, extract_path):ext_ret = 0file_name_list = {}msg = extract_msg.Message(msgfile)title = msg.subjectreciver = re.findall(r'<(.*)>', msg.to)try:if reciver:reciver = ','.join(reciver)else:reciver = decode_base64_encode_other(msg.to)reciver = re.findall(r'<(.*)>', reciver)[0]except IndexError:reciver = msg.totry:sender = re.findall(r'<(.*)>', msg.sender)[0]except:sender = msg.senderbody = msg.bodybody = body.replace('\n', '<br/>')msg_attachment = msg.attachmentsif msg_attachment:for attachment in msg_attachment:attachment.save(customPath=extract_path)file_name_list[attachment.longFilename] = attachment.longFilenameext_ret = 1return ext_ret, file_name_list, title, reciver,sender, body
#ext_ret  邮件中是否有附件
#file_name_list  附件文件名
#title  邮件标题
#reciver  收件人
#sender  发件人
#body  邮件正文内容

提取出来的有些内容是经过base64编码的,需要先通过base64解码再编码为相应的编码
类似这种格式的字符串

'=?UTF-8?B?TE9HTy5qcGc=?='

中间的一个B代表base64编码,暂未遇到其他情况
UTF-8是base64编码前的字符编码
最后两个问号中间的内容就是经过编码后的内容
下面这个decode_base64_encode_other方法是我写的一个解码的方法

import base64
import re
def decode_base64_encode_other(coded_str):try:code = re.findall(r'=\?(.*)\?\w\?.*\?=', coded_str)if not code:code = re.findall(r'\?(.*)\?\w\?.*\?=', coded_str)content = re.findall(r'=\?.*\?\w\?(.*)\?=', coded_str)if not content:content = re.findall(r'\?.*\?\w\?(.*)\?=', coded_str)baseb = base64.b64decode(content[0])original_str = str(baseb, encoding=code[0])except:return coded_strreturn original_str

python进行邮件文件.eml.pst.msg信息提取(包括附件)相关推荐

  1. Python批量处理文件的方法总结(包括folder、txt、xml、excel)

    目录 一.使用Python批量创建folder 二.使用python批量创建txt 三.使用 Python批量修改文件名 四.使用Python读取txt中的数据并创建excel 五.使用Python批 ...

  2. linux查看msg内容,如何打开MSG文件,如何转换MSG文件

    具有.MSG文件扩展名的文件很可能是Outlook邮件消息文件. Microsoft Outlook程序可以生成与电子邮件,约会,联系人或任务相关的MSG文件. 如果是电子邮件,MSG文件可能包含消息 ...

  3. python 发邮件-带附件-文本-html

    #!/usr/bin/python # encoding=utf-8 # Filename: send_email.py from email.mime.image import MIMEImage ...

  4. python 发邮件 timeout_python发送邮件

    一.相关模块介绍 发送邮件主要用到了smtplib和email两个模块,这里首先就两个模块进行一下简单的介绍: 1.smtplib模块 smtplib.SMTP([host[, port[, loca ...

  5. python发邮件有什么意思_python发邮件要装什么

    在介绍具体的实现python发邮件的具体操作之前,我觉得有必要介绍下SMTP,更有助于理解python发邮件的实现原理.SMTP协议属于TCP/IP协议簇,即简单邮件传输协议,它是一组用于由源地址到目 ...

  6. python发邮件和网络的简单使用

    一.Excel文档操作练习(pycharm) sorted() 函数对所有可迭代的对象进行排序操作. sort 与 sorted 区别: sort 是应用在 list 上的方法,sorted 可以对所 ...

  7. python发邮件图片太长显示不出来_小白入门,用python 发送定时邮件,将Dataframe转为邮件正文,链接显示为图片...

    在实际工作中,我们常常会遇到定时发送邮件的任务,基于我的实践,分享给大家,也许一篇文章写不完,就先列个目录. 本文想要解决的问题: 用python构造一封邮件,并设置定时发送出去.往往,这只是最低级的 ...

  8. python进行邮件发送以及django中利用邮件注册激活功能

    协议 SMTP协议 SMTP的全称是"Simple Mail Transfer Protocol",即简单邮件传输协议.它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮 ...

  9. python发邮件详解,smtplib和email模块详解

    在介绍具体的实现python发邮件的具体操作之前,我觉得有必要介绍下SMTP,更有助于理解python发邮件的实现原理.SMTP协议属于TCP/IP协议簇,即简单邮件传输协议,它是一组用于由源地址到目 ...

  10. python发邮件详解 -- smtplib和email模块

    文章目录 python发邮件详解,-->smtplib和email模块 1.python发邮件所需要的基础包 2.smtplib的用法 3.email模块的详细理解和使用 A.MIMEText对 ...

最新文章

  1. ORB-SLAM论文翻译
  2. Centos6.5安装Seafile,遇到的问题处理记录。
  3. winform datagridview控件使用
  4. python字符类型的一些方法
  5. 企业组网安全如何保障?SDWAN提供怎样的安全服务?
  6. windows server 远程桌面安装和配置
  7. NS安装问题收集(3)
  8. HK2000 V2版本 GPRS通讯串口说明
  9. 大家都关注的Serverless,阿里怎么做的?
  10. Go的web工作原理
  11. Linux进程共享通信 -- mmap实现
  12. 微信小程序|基于小程序+C#实现聊天功能
  13. javascript的几种继承方式
  14. 编写业务逻辑代码-清晰可维护是很重要的
  15. 微软收购雅虎遇新难题 或遭中国反垄断法阻碍
  16. 互联网广告的形式表现有哪几种?
  17. 微信小程序中map地图中取消地点图标文字(干净地图)
  18. SpringBoot+OAuth2+Google关联登录
  19. PCI GXL学习之安装篇
  20. Raptor入门练习

热门文章

  1. 【安全篇 / 反病毒】(5.6) ❀ 01. 反病毒的基本配置 ❀ FortiGate 防火墙
  2. Android 改变View的中心点
  3. windows10笔记本如何开wifi热点
  4. 查看ASA日志服务器信息,Cisco ASA防火墙的日志管理
  5. connection closed
  6. Ubuntu18.04安装搜狗输入法使用时不能输入中文
  7. 小沙弥密码箱V1.0
  8. Revealing Module(揭示模块)模式
  9. C 语言中 求余运算 具体例子,C++中求余运算符(%)示例详解
  10. 2021-泛微OA V8 SQL注入漏洞