详解python实现邮件解析的方法
作者:Yunlord 发布时间:2023-02-19 04:03:20
标签:python,邮件,解析
前言
如何通过python实现邮件解析?邮件的格式十分复杂,主要是mime协议,本文主要是从实现出发,具体原理可以自行研究。
一、安装
通过mailgun开源的Flanker库实现邮件解析。该库包含了邮件地址解析和邮件mime格式解析。
输入以下命令:
pip install flanker
二、代码实现
1.邮件头
def emlAnayalyse(path):
with open(path, 'rb') as fhdl:
raw_email = fhdl.read()
eml = mime.from_string(raw_email)
subject = eml.subject
eml_header_from = eml.headers.get('From')
eml_header_to = eml.headers.get('To')
eml_header_cc=eml.headers.get('Cc')
eml_time = eml.headers.get('Date')
# get_annex(eml, '1')
eml_attachs=attachEml1(eml)
eml_body = contentEml(eml)
f = HTMLFilter()
f.feed(eml_body)
print(f.text)
def main():
path='邮件名.eml'
emlAnayalyse(path)
if __name__ == "__main__":
main()
其中eml.header包含发送人,收件人,抄送人,时间等头信息。
2.邮件正文
# 邮件正文
def contentEml(eml):
# 判断是否为单部分
if eml.content_type.is_singlepart():
eml_body = eml.body
else:
eml_body = ''
for part in eml.parts:
# 判断是否是多部分
if part.content_type.is_multipart():
eml_body = contentEml(part)
else:
if part.content_type.main == 'text':
eml_body = part.body
return eml_body
通过回调函数,取出邮件正文部分
3.邮件附件
def attachEml1(eml):
for part in eml.parts:
if not part.content_type.is_multipart():
name = part.detected_file_name
with open(name, 'wb') as annex:
annex.write(part.body)
通过content_type.is_multipart()
判断是否为附件,将其保存下来。
来源:https://blog.csdn.net/kobepaul123/article/details/121962260


猜你喜欢
- 目录前言:1.Navicat简介2.简易教程分享连接管理库表操作查询窗口筛选表数据运行与转储 SQL 文件导入与导出向导查看页面设置工具目标
- 1、先来看看为什么会出锁住: 数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就
- 问题:1.一个销售系统,设有各级代理商,每个代理商的表是这样设计的 数据库结构表1: 代理商资料表[id]
- 什么是机器学习 (Machine Learning) 机器学习是研究计算机怎样模
- 条件语句主要有三种形式:分别为if语句、if...else语句和if...elif...else 语句1.if语句条件语句中常用的比较运算符
- 逛网站的时候经常会遇到需要上传图片的操作,这里主要来说下selenium操作上传文件的操作。前提条件:定位的元素必须是type 属性是fil
- 前言之前使用 vue2.x + webpack3.x 撸了一个 vue 单页脚手架vue 版 spa 脚手架 有兴趣的同学可以看下,内附详细
- 1、引言通过参考相关博客对hdf5格式简要介绍。hdf5在存储的是支持压缩,使用的方式是blosc,这个是速度最快的也是pandas默认支持
- 本文实例讲述了Django框架ORM数据库操作。分享给大家供大家参考,具体如下:测试数据:BookInfo表PeopleInfo表一.增加1
- 在一台新的申请服务器上安装Oracle,在创建数据库实例时,遇到Enterprise Manager配置失败问题,无法进行远程连接。操作系统
- 前面的话一般的程序语言,表示空的只有null,但javascript的设计者Brendan Eich却设计了一个undefined,这无疑增
- 目标能够使用mybatis的标签实现动态SQL拼接分析我们在前边的学习过程中,使用的SQL语句都非常简单。而在实际业务开发中,我们的SQL语
- 一、推箱子1)代码展示import osimport sysimport cfgimport pygamefrom modules impo
- 关于@property装饰器在Python中我们使用@property装饰器来把对函数的调用伪装成对属性的访问。那么为什么要这样做呢?因为@
- pytorch在数据中采用Dataset的数据保存方式,需要继承data.Dataset类,如果需要自己处理数据的话,需要实现两个基本方法。
- php读写二进制文件可以使用pack和unpack函数。今天要处理一个二进制文件的问题,所以需要用一下,特意了解一下pack的用法,unpa
- 相信有很多人有用程序向Excel导数据的需求, 且做过. 一般导出一些文本数据是很方便的, 可选方法很多, 比如拼接文本字符串存.cvs格式
- 本文实例讲述了Python实现将数据写入netCDF4中的方法。分享给大家供大家参考,具体如下:nc文件为处理气象数据文件。用户可以去htt
- 本文实例为大家分享了python+openCV利用摄像头实现人员活动检测的具体代码,供大家参考,具体内容如下1.前言最近在做个机器人比赛,其
- 常见的图片加密方法包括加密算法、水印、隐藏、压缩等。下面简要介绍一些常见的图片加密方法:加密算法加密算法是一种基于数学运算的加密方式,可对图