從批量eml文件中提取附件,使用方式如下
代碼如下
1 import email 2 import os 3 import sys 4 5 #獲取eml附件信息 6 def Get_Annex_Message(FilePath, Annex_Path): 7 global sum 8 try: 9 fp = open(FilePath, 'rb') #打開任意格式文件,通過email庫來判斷是否為eml文件 10 msg = email.message_from_binary_file(fp) 11 for part in msg.walk(): #循環信件中的每一個mime的數據塊 12 if part.get_content_maintype() == 'multipart': 13 continue 14 Annex_name = part.get_filename() 15 if Annex_name: #如果附件存在名字 16 Annex_name = str(sum) + '.' + Annex_name 17 fp = open(os.path.join(Annex_Path, Annex_name), 'wb') 18 fp.write(part.get_payload(decode=True)) 19 sum += 1 20 21 except Exception as e: 22 print(e) 23 return 24 25 #遞歸文件夾下所有文件 26 def List_Filepath(Eml_Path, Annex_Path): 27 for parent,dirnames,filenames in os.walk(Eml_Path): #遍歷文件夾 28 for dirname in dirnames: #對文件夾進行遞歸 29 List_Filepath(dirname, Annex_Path) 30 for filename in filenames: #r對文件進行判斷 31 FilePath = os.path.join(parent,filename) 32 Get_Annex_Message(FilePath, Annex_Path) 33 34 #創建目的文件夾 35 def Create_Dir(Annex_Path): 36 if os.path.exists(Annex_Path): 37 print("dir exists, Annex file will create in %s" % Annex_Path) 38 else: 39 os.mkdir(Annex_Path) 40 41 #主函數 42 def main(): 43 global sum 44 sum = int(1) 45 Eml_Path = sys.argv[1] #第一個參數為eml所在文件夾 46 Annex_Path = sys.argv[2] #第二個參數為eml附件輸出的路徑 47 Create_Dir(Annex_Path) #創建保存附加的文件夾 48 List_Filepath(Eml_Path, Annex_Path) 49 50 if __name__ == "__main__": 51 main() 52