2013-05-10 174 views
3

我想創建一個應用程序,其中用戶將.msg文件拖入我的Web應用程序中。然後,ColdFusion會提取以下字段:名稱,發件人電子郵件,主題等,並將其預填充爲可供提交的表單。我已經使用「讀取.msg ColdFusion」,但似乎無法找到任何信息。當我執行FileRead()時,我只看到亂碼ÐÏࡱá > þÿ,因爲它是加密的。這甚至有可能嗎?我希望有人能指出我正確的方向。我也願意嘗試不同的方法。ColdFusion:從.msg文件中提取信息

回答

7

正如@imthepitts提到的那樣,文件沒有加密,只是二進制文件。但是,僅用fileReadBinary()加載字節是不夠的。您需要一個能夠理解format of .msg files的工具,並且可以解析其內容。

如果你做一個快速搜索,有一堆工具能夠解析.msg文件(大部分是java或.net)。一個這樣的工具是POI's HSMF (Horrible Stupid Mail Format)。它已經內置於CF.所以你可能想從那裏開始。

下面是一個快速和骯髒的例子來自HSMF examples翻譯:

<cfscript> 
    pathToFile = "c:/path/to/someMessage.msg"; 
    MAPIMessage = createObject("java", "org.apache.poi.hsmf.MAPIMessage"); 
    message = MAPIMessage.init(pathToFile); 


    try { 
     WriteOutput("From: "& message.getDisplayFrom() &"<hr>"); 
     WriteOutput("To: "& message.getDisplayTo() &"<hr>"); 
     WriteOutput("CC: "& message.getDisplayCC() &"<hr>"); 
     WriteOutput("BCC: "& message.getDisplayBCC() &"<hr>"); 
     WriteOutput("Subject: "& message.getSubject() &"<hr>"); 
     WriteOutput("Body: "& message.getTextBody() &"<hr>"); 
    } catch (org.apache.poi.hsmf.exceptions.ChunkNotFoundException e) { 
     WriteDump(e); 
    } 
</cfscript> 
+0

嗨,謝謝你幫助我。我也想知道消息何時發送,所以我嘗試了'getMessageDate()',但它給了我一個錯誤的日期。例如,昨天發送的郵件'getMessageDate()'今天會返回一個日期。任何煽動? – isurfbecause 2013-05-10 22:35:36

+1

我在CF10中看不到這種方法。你正在加載更新版本的POI嗎?只是猜測,但也許它不能解析日期,只是今天回落。有*可能*在CF日誌文件的某處出現錯誤消息(取決於POI版本...),但您可能需要檢查。 – Leigh 2013-05-11 00:42:09

1

FileRead()用於文本文件。如果你看到亂碼,那是因爲它是一個二進制文件。嘗試FileReadBinary()

+0

我得到'複雜的對象類型不能轉換爲簡單values.' – isurfbecause 2013-05-10 00:58:23

+0

你能發佈一些代碼嗎?你確定你正在傳遞一個字符串到函數中嗎? – imthepitts 2013-05-10 01:32:39

+0

我的代碼基本上是'FileReadBinary(「upload/mail.msg」)'.msg是某種加密的outlook郵件文件。 – isurfbecause 2013-05-10 01:36:58