python几行代码实现邮件解析

Posted Yunlord

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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几行代码实现邮件解析的主要内容,如果未能解决你的问题,请参考以下文章

用python实现自动发邮件的功能

Python 向 Postman 请求代码片段

Android 逆向使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )(代码片段

YYDS!几行Python代码,就实现了全面自动探索性数据分析

YYDS!几行Python代码,就实现了全面自动探索性数据分析

几行代码就能实现复杂的 Excel 导入导出,这个工具类真心强大!