Mime4j:DefaultMessageBuilder无法解析MBOX内容 [英] Mime4j: DefaultMessageBuilder fails to parse mbox content

查看:160
本文介绍了Mime4j:DefaultMessageBuilder无法解析MBOX内容的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经下载 mime4j 从0.8.0快照颠覆建造它行家
我生成相​​关的罐子可以发现 rel=\"nofollow\">。

现在我尝试解析的从玩具MBOX文件 mime4j 测试。

我用这个<一个href=\"http://svn.apache.org/repos/asf/james/mime4j/trunk/examples/src/main/java/org/apache/james/mime4j/samples/mbox/IterateOverMbox.java\"相对=nofollow>样本code 。简述:

 最后文件MBOX =新的文件(C:\\\\ mbox.rlug);
诠释计数= 0;
对于(CharBufferWrapper消息:MboxIterator.fromFile(MBOX).charset(EN codeR.charset())建立()){
    的System.out.println(messageSummary(message.asInputStream(EN codeR.charset())));
    算上++;
}
的System.out.println(发现+数+信息);

+

 私有静态字符串messageSummary(InputStream的messageBytes)抛出IOException异常,MimeException {
    MessageBuilder建设者=新DefaultMessageBuilder();
    消息消息= builder.parseMessage(messageBytes);
    返回的String.format(\\ n消息%S \\ n+
            通过发送:\\ t%S \\ n+
            到:\\ t%S \\ n,
            message.getSubject(),
            message.getSender(),
            message.getTo());
}

输出是:


  空为:

通过发送邮件空空


  
  空为:

通过发送邮件空空


  
  空为:

通过发送邮件空空


  
  空为:

通过发送邮件空空


  
  空为:

通过发送邮件空空


  
  

找到5的消息


有确实的消息5,但为什么所有字段为空?


解决方案

我发现这个问题。

DefaultMessageBuilder 未能解​​析了Windows行分隔符 \\ r \\ MBOX文件ñ
当使用UNIX行分隔符替换它们 \\ n 解析工作。

这是一个关键问题,因为MBOX文件从的Gmail 使用 \\ r \\ n

I've downloaded mime4j 0.8.0 snapshot from subversion and built it with maven. The relevant jars I generated can be found here.

Now I try to parse a toy mbox file from mime4j test.

I use this sample code. Briefly:

final File mbox = new File("c:\\mbox.rlug");
int count = 0;
for (CharBufferWrapper message : MboxIterator.fromFile(mbox).charset(ENCODER.charset()).build()) {
    System.out.println(messageSummary(message.asInputStream(ENCODER.charset())));
    count++;
}
System.out.println("Found " + count + " messages");

+

private static String messageSummary(InputStream messageBytes) throws IOException, MimeException {
    MessageBuilder builder = new DefaultMessageBuilder();
    Message message = builder.parseMessage(messageBytes);
    return String.format("\nMessage %s \n" +
            "Sent by:\t%s\n" +
            "To:\t%s\n",
            message.getSubject(),
            message.getSender(),
            message.getTo());
}

The output is:

Message null Sent by: null To: null

Message null Sent by: null To: null

Message null Sent by: null To: null

Message null Sent by: null To: null

Message null Sent by: null To: null

Found 5 messages

There are indeed 5 messages, but why are all fields null?

解决方案

I found the problem.

DefaultMessageBuilder fails to parse mbox files that have windows line separator \r\n. When replacing them with UNIX line separator \n the parsing works.

This is a critical issue, since the mbox files downloaded from Gmail use \r\n.

这篇关于Mime4j:DefaultMessageBuilder无法解析MBOX内容的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆