【问题标题】:How to parse a Mbox file with JavaMail API?如何使用 JavaMail API 解析 Mbox 文件?
【发布时间】:2013-11-17 22:54:03
【问题描述】:

我想使用 JavaMail 来解析一个 .mbox 文件,就像 http://mail-archives.apache.org/mod_mbox/lucene-java-user/201210.mbox 一样。

我想做的是:

Session session = Session.getDefaultInstance(new Properties());
Store store = session.getStore("Here should go the .mbox file");
store.connect();

Folder folder = store.getFolder(server);
folder.open(Folder.READ_ONLY);
...

事实证明这是错误的。任何建议都会有所帮助。

提前谢谢你。

更新:工作示例

public class MBoxFileReader implements MessageReader {
    private final Path path;  // Path to .mbox file

    public MBoxFileReader(Path path) {
        this.path = path;
    }

    @Override
    public Message[] readMessages() {
        Message[] messages = new Message[0];
        URLName server = new URLName("mbox:" + path.toString());
        Properties props = new Properties();
        props.setProperty("mail.mime.address.strict", "false");
        Session session = Session.getDefaultInstance(props);
        try {
            Folder folder = session.getFolder(server);
            folder.open(Folder.READ_ONLY);
            messages = folder.getMessages();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        return messages;
    }
}

【问题讨论】:

  • 我无法让您的代码正常工作。例如,我无法解析任何 javax 邮件 API 中的 MessageReader。从代码中删除“implements MessageReader”并使用没有它的代码(确实编译),我得到了一个“mbox没有这样的提供程序”异常。
  • @Morkus 正如比尔建议的那样,您需要构建 JavaMail mbox 存储并将其导入您的项目中
  • 好的。例如,我正在寻找可以从 MacMail 读取常规 MBOX 文件的东西。谢谢。

标签: parsing jakarta-mail java mbox


【解决方案1】:

您可以使用JavaMail mbox Store,但您需要自己构建它。

【讨论】:

  • 谢谢@Bill,它运作良好。虽然在我构建它之前花了很多时间和很多错误,因为我不熟悉 maven。事实是,使用 Eclipse 插件构建 maven 时仍然存在错误,但是当我在项目中使用 mbox.jar 文件时,一切似乎都很好。
  • @Xipo 你能使用 mbox jar 吗?你能给我示例代码实现吗?我看不到如何使用 java mail mbox jar 读取我的 mbox 文件。
  • 你试过什么?您自己成功构建了 mbox 提供程序吗?
  • @VikramGulia 我在问题中添加了一个代码 sn-p,显示如何获取消息
  • @BillShannon 是的,我能够成功地为 MBOX 构建 jar。谢谢,我会检查一下。
【解决方案2】:

这可以通过 Apache Mime4j 完成:

    CharsetEncoder ENCODER = Charset.forName("UTF-8").newEncoder();
    final File mbox = new File(mboxPath);

    for (CharBufferWrapper message : MboxIterator.fromFile(mbox).charset(ENCODER.charset()).build()) {
        System.out.println(message);
    }

你需要:

<dependencies>
    <dependency>
        <groupId>com.sun.mail</groupId>
        <artifactId>javax.mail</artifactId>
        <version>1.6.1</version>
    </dependency>

    <dependency>
        <groupId>org.apache.james</groupId>
        <artifactId>apache-mime4j</artifactId>
        <version>0.8.1</version>
        <type>pom</type>
    </dependency>

</dependencies>

【讨论】:

  • 有趣。我试过这个,但在每次指向 mbox 文件的情况下,我都得到了 Operation Not Permitted 异常。 (注意:在编译此代码之前,您必须单独下载 MboxIterator 和其他几个类)。
猜你喜欢
  • 2016-06-17
  • 1970-01-01
  • 2017-02-03
  • 2013-05-19
  • 1970-01-01
  • 2015-03-21
  • 1970-01-01
  • 2012-06-19
  • 1970-01-01
相关资源
最近更新 更多