使用outlook消息分析器库解析outlook电子邮件

bfnvny8b  于 2021-08-25  发布在  Java
关注(0)|答案(1)|浏览(371)

我正在尝试从远程邮箱加载收件箱中的电子邮件,并对其进行解析,以提取附件和html格式的转换正文。
我使用下面的代码片段使用outlook消息解析器jar进行解析

ResultSuccess insertMessage(Message currentMsg) {

    final OutlookMessageParser msgp = new OutlookMessageParser();

    final OutlookMessage msg = parseMsg(currentMsg.getInputStream());
}

currentmsg的类型为 javax.mail.Message 从服务器获取电子邮件的代码片段如下

Properties props = new Properties();
Message currentMessage;

Session session = Session.getInstance(props, null);

session.setDebug(debug);

store = session.getStore(PROTOCOL);

store.connect(host, username, password);

Message message[] = inboxfolder.getMessages();

Message copyMessage[] = new Message[1];

int n = message.length;

for (int j = 0; j < n; j++) {
    currentMessage = message[j];
    ResultSuccess result = insertMessage(currentMessage);

例外情况详情如下

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
org.apache.poi.poifs.filesystem.NotOLE2FileException: Invalid header signature; read 0x615F3430305F2D2D, expected 0xE11AB1A1E011CFD0 - Your file appears not to be a valid OLE2 document
    at org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:151)
    at org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:117)
    at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:285)
    at org.simplejavamail.outlookmessageparser.OutlookMessageParser.parseMsg(OutlookMessageParser.java:133)
    at com.email.Email_Parse.loadMessages(Email_Parse.java:38)
    at com.email.Email_Parse.getMessages(Email_Parse.java:116)
    at com.email.Email_Parse.main(Email_Parse.java:26)

但是,当我尝试从本地磁盘加载电子邮件并对其进行解析时,问题并没有出现。
你知道如何解决这个问题吗?

tzxcd3kk

tzxcd3kk1#

我想您正在使用outlook消息分析器来解析存储在磁盘上的电子邮件。
从邮件服务器检索到的邮件不是outlook文件格式(即使远程服务器是microsoft exchange server或microsoft的outlook电子邮件服务),因此outlook邮件分析器将无法对其进行分析。
您应该使用javamail api来检索消息体及其附件。
本页描述了阅读带有附件的邮件所需的步骤(带有一些示例)。以下是摘录:
问:如何阅读带有附件的邮件并保存附件?
答:如上所述,带有附件的消息在mime中表示为多部分消息。在简单的情况下,消息对象的getcontent方法的结果将是一个mimemultipart对象。多部分对象的第一个主体部分将是消息的主要文本。其他身体部位将作为附件。java演示程序演示了如何遍历消息中的所有多部分对象,并提取每个身体部位的数据。getdisposition方法将提示您是应该内联显示身体部位,还是应该将身体部位视为附件(但请注意,并非所有邮件程序都提供此信息)。因此,要将身体部位的内容保存到文件中,请使用mimebodypart的savefile方法。
要将主体部分中的数据保存到文件中(例如),请使用getinputstream方法访问附件内容并将数据复制到fileoutputstream。请注意,复制数据时,不能使用可用方法确定附件中有多少数据。相反,您必须读取数据直到eof。mimebodypart的savefile方法将为您完成此任务。但是,您不应该直接使用getfilename方法的结果来命名要保存的文件;这样做可能会导致您无意中覆盖文件,包括系统文件。
请注意,还有更复杂的案件需要处理。例如,一些邮件发送者以纯文本和html两种形式发送主体。这通常会显示为多部分/可选内容(以及mimemultipart对象),而不是简单的文本正文部分。此外,数字签名或加密的消息更为复杂。处理所有这些案件都可能具有挑战性。请参考我们主页上列出的各种mime规范和其他资源。

相关问题