with open ( "eml文件的路径" , 'rb' ) as f : a = f . read ( ) eml = eml_parser . eml_parser . decode_email_b ( a , True , True ) #decode_email_b方法 #第一个参数是eml文件二进制读出来的内容 #第二个参数表示邮件解析返回的数据结构里是否包含邮件的原始内容,也就是html内容,我这里选True,这样内容可以直接放到网页中显示。 #第三个参数表示解析返回的数据结构中是否包含附件内容。
  1. 邮件正文部分提取
    eml[“body”]是一个列表,列表里每一项按显示类型分,这里我选择获得了text/html类型的正文文本
for i in eml["body"]:
    #text/html是带html标签,可以直接放到网页里面展示    
    #还有类型text/plain,正文部分的文字信息
    if i["content_type"] == "text/html":   
        #下两行是对html样式进行了调整以适配前端显示,可自行调整
        body = i["content"].replace('\n','').replace('','')              
        body = re.sub('body\s*{.*?}', '', body)        
        break

3.邮件标题、收件人、发件人信息

title = eml["header"]["subject"]
reciver = ','.join(eml["header"]["to"])
sender = eml["header"]["from"]

4.附件提取
提取出来的附件内容是经过base64编码的,所以先解码,然后直接二进制写入文件

import base64
if eml.get('attachment'):
    for i in eml['attachment']:
        x=base64.b64decode(i['raw'])        
        with open(i['filename'], 'wb') as f:            
            f.write(x)

pst文件

linux系统上安装readpst
我这里是ubuntu系统,使用如下安装命令
sudo apt install readpst

提取pst文件的方法是使用readpst命令将pst文件解析成eml文件,再对每一个eml文件进行信息的提取。

#参数pstfile是pst文件存放的路径
def extract_pst(pstfile):
    pstfile_path = '/'. join(pstfile.split('/')[: -1])
    #pstfile_path是提取出的eml文件需要存放的目标文件夹
    commend = 'sudo readpst -D -S -M -b -j 10 -o {} {} '.format(pstfile_path, pstfile)
    logger.info(commend)
    child = pexpect.spawn(commend)
    pwd = SYSTEMPWD#SYSTEMPWD设为你linux系统的用户密码
    child.sendline(pwd)
    time.sleep(0.3)
    #执行readpst命令后目标文件夹下多了一个outlook数据文件的文件夹,eml就保存在其中
    #以下列出每一个eml文件的路径,并作为列表返回
    email_list = []
    try:
        file_list = os.listdir(pstfile_path)
        logger.info(str(file_list))
        logger.info(pstfile_path)
        for i in file_list:
            if os.path.isdir(pstfile_path+'/'+i):
                for root,dirs,files in os.walk(pstfile_path+'/'+i):
                    for name in files:
                        email_list.append(os.path.join(root,name))
    except FileNotFoundError:
        logger.error("FileNotFoundError")
        return None
    return email_list

此时我们已经有了所有eml文件的路径,再通过上面提取eml信息的方法进行邮件信息的提取即可

MSG文件

我这里只找到提取普通msg文件的方法,保存为Unicode编码的msg文件暂未找到方法

pip install extract_msg
#参数msgfile是msg文件的保存路径
#参数extract_path是提取出的附件的保存路径
import extract_msg
def extract_msgs(msgfile, extract_path):
    ext_ret = 0
    file_name_list = {}
    msg = extract_msg.Message(msgfile)
    title = msg.subject
    reciver = re.findall(r'<(.*)>', msg.to)
    try:
        if reciver:
            reciver = ','.join(reciver)
        else:
            reciver = decode_base64_encode_other(msg.to)
            reciver = re.findall(r'<(.*)>', reciver)[0]
    except IndexError:
        reciver = msg.to
    try:
        sender = re.findall(r'<(.*)>', msg.sender)[0]
    except:
        sender = msg.sender
    body = msg.body
    body = body.replace('\n', '<br/>')
    msg_attachment = msg.attachments
    if msg_attachment:
        for attachment in msg_attachment:
            attachment.save(customPath=extract_path)
            file_name_list[attachment.longFilename] = attachment.longFilename
        ext_ret = 1
    return ext_ret, file_name_list, title, reciver,sender, body
#ext_ret  邮件中是否有附件
#file_name_list  附件文件名
#title  邮件标题
#reciver  收件人
#sender  发件人
#body  邮件正文内容

提取出来的有些内容是经过base64编码的,需要先通过base64解码再编码为相应的编码
类似这种格式的字符串

'=?UTF-8?B?TE9HTy5qcGc=?='

中间的一个B代表base64编码,暂未遇到其他情况
UTF-8是base64编码前的字符编码
最后两个问号中间的内容就是经过编码后的内容
下面这个decode_base64_encode_other方法是我写的一个解码的方法

import base64
import re
def decode_base64_encode_other(coded_str):
    try:
        code = re.findall(r'=\?(.*)\?\w\?.*\?=', coded_str)
        if not code:
            code = re.findall(r'\?(.*)\?\w\?.*\?=', coded_str)
        content = re.findall(r'=\?.*\?\w\?(.*)\?=', coded_str)
        if not content:
            content = re.findall(r'\?.*\?\w\?(.*)\?=', coded_str)
        baseb = base64.b64decode(content[0])
        original_str = str(baseb, encoding=code[0])
    except:
        return coded_str
    return original_str
                    eml文件解析eml文件使用了eml_parser模块安装:pip install eml_parser使用:获得eml实例import eml_parserwith open("eml文件的路径",'rb') as f:    a=f.read()eml = eml_parser.eml_parser.decode_email_b(a,True,True)#decode...
pip install eml_parser[filemagic]
 :warning: 注意:如果您不想/不能使用文件魔术(例如,如果您正在使用python-magic),请通过以下方式安装: 
pip install eml_parser
OSX用户注意事项:
 确保安装libmagic,否则eml_parser将不起作用。
用法示例:
 import datetime
import json
import eml_parser
def json_serial ( o
使用Outlook MAPI将电子邮件(.msg或.eml)复制到unicode pst文件中。
 ##参考:
 Stephen Griffin编写的MFCMAPI代码: 
 ##构建环境:
 VS Express 2013桌面
32位元Outlook 2013
 ##其他:
 include \ outlook文件来自“ Office 2010开发人员资源”。
 mimeole.h来自MFCMAPI。
 ##演示:
 pstar.exe测试坑pst_file.pst
 或在VS中单击“运行”
 Python脚本,用于为mbox文件中的每封电子邮件创建.eml文件。
 使用风险自负。 请先备份,然后再运行。
 我绝不是Python开发人员。 这只是我出于需要而放在一起的脚本。 也许您必须对其进行修改才能使用您的文件。
 我通过它为您通过从GMail帐户获得的mbox文件中的每个电子邮件创建了一个eml文件Python 2.7以上
仅在Mac OS X 10.14上测试
用法/选项
python mbox2eml.py [-f | --file] source_file.mbox [-o | --output] target_directory
-h, --help显示选项文档。 (可选。无自变量。)
 -f, --file source_file.mbox file -f, --file source_file.mbox包含电子邮件的mbox文件。 电
import emlformat from 'eml-format';
const [emailContent, setEmailContent] = useState("");
function readerEml(file) {
let reader = new F...
from langdetect import detect
from langdetect import DetectorFactory
from translate import Translator  # 英汉翻译
部分...
				
提取OutLook邮件里面的邮件头信息(发件人、收件人) 因为之前发email的时候,被win10的惊喜更新砸中,而我也不小心点了一下,所以控制台的发送日志全没了,面对着已经发了的1000多个邮件,也不能根据最后一个发的人做分割(因为有可能,因为网络原因,有的人发的会靠后一点,作为一个程序员,怎么可能一封一封的比对,这辈子都不可能一封一封的比对的) 其实主要是借助工具,代码层面相信大家都会 首先说...
点进来看这篇文章的你,是不是有这种情况,不管用什么模块去读取邮箱中的邮件,都能看到类似 “=?gb18030?B?1vfM4g==?=” 这样的仿佛像乱码一样的东西,你比如说这样子的: X-QQ-FEAT : YSSoAXAEBlFn3rgysgiXLVc6JAR+kPKEFS7ZN3zDXcfIwJbZ9PdiXyEAi1P1Y bCMaCcjuhodvyPMnINgRUNXG3cL92U...
记事本是一款基础文本编辑软件,无法直接提取eml文件附件。要提取eml文件附件,我们可以使用以下方法: 1. 使用专业的电子邮件客户端软件:如Outlook、Thunderbird等,打开eml文件,并通过软件自带的附件提取功能将附件保存到指定位置。 2. 使用第三方的eml文件阅读器和提取工具:市面上存在许多eml文件阅读器,它们通常都具备提取附件的功能。下载并安装合适的工具,打开eml文件,并通过工具提供的选项将附件保存到所需位置。 3. 手动提取:eml文件是一种邮件标准格式,它实际上是一封邮件的源代码。通过用记事本打开eml文件,可以看到邮件内容和附件的原始数据。在源代码中查找正确的附件字节流数据,并将其粘贴到新建的文件中(注意保存文件时,需将后缀名更改为对应附件类型的扩展名)。这种方法相对复杂,需要一定的技术基础和耐心。 总的来说,使用记事本直接提取eml文件附件是不可行的,建议使用专业的邮件客户端软件或第三方工具来提取附件,以确保效率和附件的完整性。 ### 回答2: 要使用记事本提取.eml文件附件,你需要按照以下步骤进行操作。 首先,将.eml文件保存到你的计算机上。在保存时,确保.eml文件的保存位置易于访问,并且你知道文件的确切路径。 然后,右键单击.eml文件并选择“打开方式”。在打开方式下拉菜单中,选择“记事本”。这将使用记事本打开.eml文件。 在记事本窗口中,.eml文件的内容将以文本形式显示。你可以看到附件邮件正文的文本内容一同显示。 要提取附件,首先找到附件的开始标记。通常,附件的开始标记以“Content-Disposition: attachment”开头,并且在该行中的文件名可以看到。 在找到附件的开始标记后,找到附件的结束标记。通常,附件的结束标记以“--”开头,并且在该行中会有一个随机生成的标识符。 从开始标记到结束标记之间的文本就是附件的内容,这些文本是以二进制格式编码的。你需要将这些二进制文本提取出来并将其保存为附件。 为了提取附件,可以使用记事本中的复制和粘贴功能。选择附件内容并复制,然后在一个新的记事本文档中粘贴。 将粘贴的内容保存为一个新的文件,并将其扩展名更改为匹配附件文件类型。例如,如果附件是图片文件,你可以将其扩展名更改为.png、.jpg等。 完成上述步骤后,你已成功提取了.eml文件中的附件。你可以通过双击提取出的附件来打开和查看其内容。 ### 回答3: 使用记事本提取.eml文件附件的方法如下: 1. 首先,将.eml文件保存到计算机上的任意位置,确保你可以轻松找到这个文件。 2. 打开记事本工具,你可以通过在开始菜单中搜索"记事本"来找到它。 3. 在记事本中,点击"文件"选项,并选择"打开"。在文件对话框中,选择你保存的.eml文件,然后点击"打开"按钮。 4. .eml文件将在记事本中被打开,并以文本格式显示。 5. 请注意,.eml文件是一种邮件文件,可能包含邮件主题、发件人、收件人、正文和附件等信息。你需要在文件中找到附件的位置。 6. 通常情况下,附件会以一组编码字符表示,类似于"Content-Type: application/octet-stream; name="example.jpg""的格式,这表示一个名为"example.jpg"的附件。 7. 在找到附件的位置后,你可以将这些编码字符复制到一个新的文本文件中,并将文件保存为相应的格式。例如,如果附件是一个.jpg图片,可以将该文本文件保存为"example.txt"。 8. 最后,将保存的文本文件后缀名从.txt更改为相应格式的后缀名,例如.jpg,以恢复附件的原始格式。 需要注意的是,记事本只能提取和查看.eml文件中的文本内容,对于其他类型的附件(如图片、文档、压缩包等)可能无法直接查看。对于这些类型的附件,你可以使用相应的应用程序或提取工具进行查看和提取。
CSDN-Ada助手: 非常感谢CSDN博主分享的这篇博客,对于需要进行邮件文件提取的用户来说非常有用。我觉得下一篇博客可以写关于Python进行网络爬虫的技术文章,介绍如何使用Python编写爬虫程序获取网页信息。这样的技术文章对其他用户学习Python编程和网络爬虫都很有帮助。相信会有更多读者期待你的下一篇博客。 为了方便博主创作,提高生产力,CSDN上线了AI写作助手功能,就在创作编辑器右侧哦~(https://mp.csdn.net/edit?utm_source=blog_comment_recall )诚邀您来加入测评,到此(https://activity.csdn.net/creatActivity?id=10450&utm_source=blog_comment_recall)发布测评文章即可获得「话题勋章」,同时还有机会拿定制奖牌。 python进行邮件文件.eml.pst.msg信息提取(包括附件) Jason-Lai: 大佬, 你有发送已保存的msg格式的邮件的方法吗, 因为用extract_msg提取的邮件的正文不带完整的HTML格式,所以不是那么友好 python进行邮件文件.eml.pst.msg信息提取(包括附件) Jason-Lai: 高手,这篇文章的提取msg文件的方法亲测有效