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

目录
  • 前言
  • 一、安装
  • 二、代码实现
    • 1.邮件头
    • 2.邮件正文
    • 3.邮件附件
  • 总结

前言

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

总结

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

(0)

相关推荐

  • Python通过yagmail实现发送邮件代码解析

    之前使用email模块+smtplib模块发送邮件,虽然可以实现功能,但过程比较繁琐,今天发现一个宝藏库(yagmail),可以说是炒鸡好用啦!!! 贴上实现代码,大家细品 yagmail安装 pip install yagmail 封装邮件发送服务: import yagmail class SendEmail: def __init__(self, receiver,subject=None,contents=None,attachment=None): """ :par

  • Python 调用 Outlook 发送邮件过程解析

    微软 Office 提供基于 COM 接口的编程.Python 通过 pywin32 可以方便地调用各组件.如果下载和安装 pywin32 有困难,可以到 Sourceforge 的镜像网摘查找合适的版本. 单一账号 import win32com.client as win32 def send_mail(): outlook = win32.Dispatch('Outlook.Application') mail_item = outlook.CreateItem(0) # 0: olMai

  • 基于python SMTP实现自动发送邮件教程解析

    最近工作中的一个项目需要自动发送一些信息邮件到指定邮箱的需求,那么如何实现Python自动发送邮件的功能呢?接下来我们就来简单的介绍下如何利用Python来实现自动发送邮件的功能. Python SMTP发送邮件 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议 ,说白了就是发送邮件的协议,python的smplib库对SMTP协议进行了简单的封装,提供了对SMTP的支持,可以发送纯文本邮件.HTML文件以及带附件的邮件. 首先我们构建一个SendEmai

  • PYTHON发送邮件YAGMAIL的简单实现解析

    这篇文章主要介绍了PYTHON发送邮件YAGMAIL的简单实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 yagmail发送邮件只需要3行代码就可以搞定,首先安装yagmail:pip install yagmail demo如下: # todo 导入邮件服务器 import yagmail sender = '148908761@qq.com' # 发送人邮箱账号 password = 'ersbmrvcnscebab' # 发送人邮

  • Python发送邮件实现基础解析

    一.python邮件模块简介 email模块属于内置模块,用来自定义邮件的中文.主题.日期.附件等信息: smtplib模块属于内置模块,它对smtp协议进行了简单的封装,能实现邮件发送. 二.邮件发送步骤 创建SMTP的操作对象并连接smtp目标服务器,可以是163.QQ等 使用自己的账号登录目标服务器(自己的邮箱地址和邮箱授权码) 调用对象中的方法,发送邮件到目标地址 示例代码如下: import smtplib server = smtplib.SMTP() smtp.connect(sm

  • Python Flask异步发送邮件实现方法解析

    第一步,修改工厂函数,配置邮件参数 from flask import Flask from config import Config from flask_sqlalchemy import SQLAlchemy from flask_mail import Mail db = SQLAlchemy() mail = Mail() def create_app(): app = Flask(__name__) app.config.from_object(Config) db.init_app

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

    目录 前言 一.安装 二.代码实现 1.邮件头 2.邮件正文 3.邮件附件 总结 前言 如何通过python实现邮件解析?邮件的格式十分复杂,主要是mime协议,本文主要是从实现出发,具体原理可以自行研究. 一.安装 通过mailgun开源的Flanker库实现邮件解析.该库包含了邮件地址解析和邮件mime格式解析. 输入以下命令: pip install flanker 二.代码实现 1.邮件头 def emlAnayalyse(path): with open(path, 'rb') as

  • 详解Python调用系统命令的六种方法

    作为胶水语言,Python可以很方便的执行系统命令,Python3中常用的执行操作系统命令有os.system().os.popen().subprocess.popen().subprocess.call().subprocess.run().subprocess.getstatusoutput()六种方法. os.system() system函数可以将字符串转化成命令在服务器上运行:其原理是每一条system函数执行时,其会创建一个子进程在系统上执行命令行,子进程的执行结果无法影响主进程.

  • 详解Python列表解析式的使用方法

    目录 列表解析式的优势 如何在 Python 中创建列表 循环 map() 对象 列表解析式 哪种方法更有效 高级解析式 条件逻辑 集合解析式 字典解析式 海象运算符 什么时候不要使用解析式 注意嵌套的解析式 为大型数据集使用生成器 总结 Python 是一种极其多样化和强大的编程语言!当需要解决一个问题时,它有着不同的方法. 在本文中,将会展示列表解析式(List Comprehension).我们将讨论如何使用它?什么时候该或不该使用它? 列表解析式的优势 比循环更节省时间和空间. 需要更少

  • 详解Python中while无限迭代循环方法

    目录 前言 while循环 break语句 和 continue语句 else 子句 无限循环 嵌套while循环 单行 while 循环 前言 Python 有 while 语句和 for 语句作为循环处理.虽然 for 语句具有一定数量的进程,但 while 语句是『直到满足条件』类型的循环进程. 对于无限迭代 while,循环执行的次数没有事先明确指定.相反,只要满足某些条件指定的块就会重复执行. 使用定义迭代 for,指定块将被执行的次数在循环开始时已经倍明确指定. 除了 while 语

  • 详解python中@classmethod和@staticmethod方法

    在python类当中,经常会遇到@classmethod和@staticmethod这两个装饰器,那么到底它们的区别和作用是啥子呢?具体来看下. @classmethod :默认有一个cls参数,用类或对象都可以调用. @staticmethod:静态方法,无默认参数,用类和对象都可以调用. 1.@staticmethod: 我们看下代码: class A: def f1(x): print(x) A.f1(2) # 2 类.函数 创建一个类,通过类调用函数. class A: @staticm

  • 详解Python用户登录接口的方法

    Readme: blog address: 摘要:编写登录接口 输入用户名.密码 认证成功后显示欢迎信息 输错3次后锁定 关键词:循环:判断:外部数据读写:列表:字典: 展望:可以结合数据库读写. codes: # Author: Steven Zeng ''' 作业2:编写登录接口 输入用户名密码 认证成功后显示欢迎信息 输错3次后锁定 ''' print("welcome to here") f1=open('username.txt') f2=open('password.txt

  • 详解Python命令行解析工具Argparse

    最近在研究pathon的命令行解析工具,argparse,它是Python标准库中推荐使用的编写命令行程序的工具. 以前老是做UI程序,今天试了下命令行程序,感觉相当好,不用再花大把时间去研究界面问题,尤其是vc++中尤其繁琐. 现在用python来实现命令行,核心计算模块可以用c自己写扩展库,效果挺好. 学习了argparse,在官方文档中找到一篇toturial,简单翻译了下. http://docs.python.org/2/howto/argparse.html#id1 Argparse

  • 详解python中index()、find()方法

    python中index().find()方法,具体内容如下: index() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,该方法与 python find()方法一样,只不过如果str不在 string中会报一个异常.影响后面程序执行 index()方法语法:str.index(str, beg=0, end=len(string)) str -- 指定检索的字符串 beg -- 开始索引,默认为0. end --

  • 详解python uiautomator2 watcher的使用方法

    该方是基于uiautomator2如下版本进行验证的: PS C:\windows\system32> pip show uiautomator2 Name: uiautomator2 Version: 1.2.2 Summary: Python Wrapper for Android UiAutomator2 test tool Home-page: https://github.com/codeskyblue/uiautomator2 Author: codeskyblue Author-e

  • 详解Python中__str__和__repr__方法的区别

    对我当前工程进行全部测试需要花费不少时间.既然有 26 GB 空闲内存,为何不让其发挥余热呢? tmpfs 可以通过把文件系统保存在大内存中来加速测试的执行效率. 但优点也是缺点,tmpfs 只把结果保存在内存中,所以你必须自己编写脚本来把结果回写到磁盘上进行保留.而且这些脚本必须良好书写和执行,否则就要失去部分或全部的工作成果了. 一种常见的方法是直接在tmpfs文件夹中工作,然后把工作成果备份到磁盘上的一个文件夹中.当您的机器启动时你从那个备份文件夹恢复tmpfs文件夹.启动之后用cron同

随机推荐