开发者

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

开发者 https://www.devze.com 2022-12-07 09:37 出处:网络 作者: Yunlord
目录前言一、安装二、代码实现1.邮件头2.编程客栈邮件正文3.邮件附件总结前言
目录
  • 前言
  • 一、安装
  • 二、代码实现
    • 1.邮件头
    • 2.编程客栈邮件正文
    • 3.邮件附件
  • 总结

    前言

    如何通过python实现邮件解析?邮件的格式十分复杂,主要是mime协议,本文主要是从实现出发,具体原理可以自行研究。

    一、安装

    通过mailgun开源的Flanker库实现邮件解析。该库包含了邮件地址解析和邮件mime格式解析。

    输入以下命令:

    pip install flanker

    二、代码实现

    1.邮件头

    def emlAnayalyse(path):
        with open(path, 'rb') as f编程客栈hdl:
            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 emlolPAGqjx.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()判断是否为附件,将其保存下来。

    总结

    本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消