2013-05-10 172 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