热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

详解python实现邮件解析的方法_python

这篇文章主要为大家介绍了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()判断是否为附件,将其保存下来。

总结

前言

如何通过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()判断是否为附件,将其保存下来。

总结


推荐阅读
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • Python操作MySQL(pymysql模块)详解及示例代码
    本文介绍了使用Python操作MySQL数据库的方法,详细讲解了pymysql模块的安装和连接MySQL数据库的步骤,并提供了示例代码。内容涵盖了创建表、插入数据、查询数据等操作,帮助读者快速掌握Python操作MySQL的技巧。 ... [详细]
author-avatar
书友41494390_263
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有