推举是visual studio code开拓环境
2、通过email库提取出邮件eml文件中的附件文件,个中指定的eml文件夹中的文件列表如下图
详细代码如下,可根据自己的须要换本钱身的eml文件夹

from email import policyfrom email.header import decode_headerfrom email.parser import BytesParser# 从eml文件中提取附件def extract_attachments_from_eml(emlFileDir): saveDir = '保存的附件' # 须要保存的附件目录 saveDir = os.path.join(emlFileDir, saveDir) if not os.path.exists(saveDir): # 在打开的eml目录下新建saveDir os.mkdir(saveDir) # 遍历目录下的所有文件 for filename in os.listdir(emlFileDir): if filename.endswith('.eml'): # 只处理eml文件 file_path = os.path.join(emlFileDir, filename) # 得到eml文件路径 with open(file_path, 'rb') as fp: # 利用BytesParser打开并解析EML文件 msg = BytesParser(policy=policy.default).parse(fp) # 遍历eml邮件中的所有部分 for part in msg.walk(): # 检讨是否有附件,有content-disposition且不为inline if part.get_content_disposition() and part.get_content_disposition().startswith('attachment'): filename = part.get_filename() # 解码文件名,以防止他是非ascii字符 # filename = email.header.make_header(email.header.decode_header(filename)) filename = part.get_filename() filepath = os.path.join(saveDir, filename) # 构建完全的保存路径 # 保存附件到本地 if not os.path.isfile(filepath): with open(filepath, 'wb') as f: f.write(part.get_payload(decode=True)) print(f"从eml文件中提取的附件 {filename} 已保存到 {filepath}") else: print(f"从eml文件中提取的附件 {filename} 已存在于 {filepath}")if __name__ == '__main__': extract_attachments_from_eml('./eml附件')
3、在main函数中指定须要提取的eml文件所在的路径,然后实行如下代码
python eml.py
4、实行上述命令后,会在指定的eml文件夹下产生<保存的附件>这个文件夹