題:
將EML文件轉換為純文本的轉換器
Lafix
2016-01-19 09:11:55 UTC
view on stackexchange narkive permalink

我將電子郵件歸檔到許多EML文件中,但是當這些文件作為純文本文件打開時,其內容不可讀。

我想知道是否有一個轉換器(必須是免費的)可以將EML文件批量轉換為包含主題,內容等的純文本文件(附件可以忽略)。

什麼操作系統?它必須具有GUI,還是首選命令行?
二 答案:
#1
+4
Ciprum
2016-03-07 03:07:53 UTC
view on stackexchange narkive permalink

我從這裡獲取了一個可以正常工作的腳本,並對其進行了修改以滿足您的需要。

您必須為該腳本安裝 Python 2.7跑步。安裝Python時,請確保選擇將python.exe添加到Path

無論如何,您都將腳本另存為 [所需名稱] .py 並與所有 .eml 文件放在同一文件夾中。現在只需打開腳本。就是這樣。

它將創建一個文件夾 Email 。該文件夾具有與您的 .eml 文件相同名稱的子文件夾。在該文件夾中,您可以找到所有附件以及帶有所有電子郵件信息的.txt文件:

  • 發件人
  • 收件人
  • 主題
  • 日期
  • 附件數
  • 部件數
  • 郵件本身(duh。)

請注意,有些電子郵件可能包含HTML。該腳本確實捕獲了HTML,但將其保存為純文本,因此您必須複製粘貼 .txt 文件的HTML部分,將其另存為 .htm ,然後將其打開

要求:

  • 免費✓

腳本如下:

 從電子郵件導入message_from_fileimport osdef file_exists(f):返回os.path.exists(os.path.join(path,f).replace(“ \\”,“ /”))def save_file(fn,cont): file = open(os.path.join(path,fn).replace(“ \\”,“ /”),“ wb”)file.write(cont)file.close()def Construct_name(id,fn): id = id.split(“。”)id = id [0] + id [1]返回id +“。” + fndef disqo(s):s = s.strip()如果s.startswith(“'”)和s.endswith(“'”):如果s.startswith('“')和s.endswith('”'):返回s [1:-1]:返回s [1:-1]返回sdef disgra(s) :s = s.strip(),如果s.startswith(“ <”)和s.endswith(“ >”):返回s [1:-1]返回sdef提取(m,key):HTML =“” Text = “”文件= {}零件= 0(如果不是m.is_ multipart():如果m.get_filename():fn = m.get_filename()cfn =構造名稱(鍵,fn)Files [fn] =(cfn,無)
如果file_exists(cfn):返回文本,HTML,文件,1個save_file(cfn,m.get_payload(decode = True))返回文本,HTML,文件,1 cp = m.get_content_type()如果cp ==“ text / plain “:文字+ = m.get_payload(decode = True)elif cp ==” text / html“:HTML + = m.get_payload(decode = True)否則:cp = m.get(” content-type“)嘗試: id = disgra(m.get(“ content-id”))除外:id = None o = cp.find(“ name =”)如果o ==-1:返回Text,Html,Files,1 ox = cp。如果ox ==-1,則找到(“;”,o):ox = None o + = 5; fn = cp [o:ox] fn = disqo(fn)cfn = Construct_name(key,fn)Files [fn] =(cfn,id)如果file_exists(cfn):返回Text,HTML,文件,1個save_file(cfn, m.get_payload(decode = True))返回Text,Html,Files,1 y = 0而1:嘗試:pl = m.get_payload(y)除外:打破t,h,f,p =提取(pl,鍵)文字+ = t; html + = h; Files.update(f);零件+ = py + = 1返回文本,HTML,文件,Partsdef提取(msgfile,鍵):m = message_from_file(msgfile)發件人,收件人,主題,日期=字幕(m)文本,HTML,文件,零件=提取( m,鍵)Text = Text.strip(); Html = Html.strip()msg = {“主題”:主題,“來自”:從,“至”:至,“日期”:日期,“文本”:文本,“ html”:HTML,“部分”:零件} if文件:msg [“ files”] =文件返回msgdef標題(來源):Date =“” if origin.has_key(“ date”):Date = origin [“ date”]。strip()From =“”如果origin.has_key(“ from”):From = origin [“ from”]。strip()To =“” if origin.has_key(“ to”):To = origin [“ to”]。strip()Subject = “” if origin.has_key(“ subject”):Subject = origin [“ subject”]。strip()return From,To,Subject,Dateif __name__ ==“ __main__”:全局路徑startdirname =“ Email” num = 1我在範圍(10000000)中:如果os.path.exists(startdirname + str(num))== False:
os.makedirs(“ Email” + str(num))中斷else:num + = 1 for os.listdir(“。”):如果i.endswith(“。eml”)== True:nam = i [ :-4] path =“ ./” + startdirname + str(num)+“ /” + nam os.makedirs(“ ./” + startdirname + str(num)+“ /” + nam)f =打開(i ,“ rb”)emailDict =提取(f,f.name)f.close()textFile =“” froms = emailDict [“ from”] tos = emailDict [“ to”]主題= emailDict [“ subject”]部件= emailDict [“ parts”] date = emailDict [“ date”] txt = emailDict [“ text”] html = emailDict [“ html”] files = emailDict [“ files”]中i的[]:files.append(i) textFile + =“發件人:” + froms +“ \ n” textFile + =“致:” + tos +“ \ n” textFile + =“主題:” +主題+“ \ n” textFile + =“日期:” +日期+“ \ n \ n” textFile + =“文件:” +“,” .jo in(文件)+“ \ n” textFile + =“部件:” + str(部件)+“ \ n \ n” textFile + =“文本:\ n \ n” + txt +“ \ n \ n” textFile + =“ HTML:\ n \ n” + html wf = open(“ ./” + startdirname + str(num)+“ /” + nam +“ /” +“ txt_” + nam +“ .txt”,“ w “)wf.write(textFile)wf.close() 

剛剛意識到這有多大了。希望你仍然需要它! :P

#2
  0
Steve Barnes
2016-01-20 00:22:56 UTC
view on stackexchange narkive permalink

如果您不介意編寫一些代碼,則可以按照 this堆棧溢出問題的答案中的示例代碼在 python中執行此操作。

Python本身是:

  • 免費的免費&開源
  • 幾乎可以在任何平台上使用
  • 引用的示例包括有關提取附件及其內容的信息。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...