Как разобрать файл Mbox с помощью JavaMail API?

Я хочу использовать 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;
    }
}

person Xipo    schedule 06.11.2013    source источник
comment
Я не мог заставить ваш код работать. Например, мне не удалось разрешить MessageReader в любом почтовом API javax. Удалив из кода реализующий MessageReader и используя код без него (который скомпилировался), я получил отсутствие такого провайдера для mbox Exception.   -  person Morkus    schedule 28.02.2019
comment
@Morkus Как предложил Билл, вам нужно создать хранилище JavaMail mbox и импортировать его в свой проект.   -  person Xipo    schedule 28.02.2019
comment
ХОРОШО. Я искал что-то, что читало бы обычный файл MBOX, например, из MacMail. Спасибо.   -  person Morkus    schedule 28.02.2019


Ответы (2)


Вы можете использовать Магазин JavaMail mbox, но вам нужно будет создать его самостоятельно.

person Bill Shannon    schedule 06.11.2013
comment
Спасибо @Bill, это работает хорошо. Хотя потребовалось совсем немного времени и много ошибок, прежде чем я его построил, потому что я не был знаком с maven. Правда в том, что ошибка все еще существует при сборке с использованием плагина eclipse для maven, но все выглядит нормально, когда я использую файл mbox.jar в своем проекте. - person Xipo; 13.11.2013
comment
@Xipo, ты смог использовать mbox jar? не могли бы вы дать мне пример реализации кода? Я не могу понять, как читать мой файл mbox с помощью java mail mbox jar. - person Vikram Gulia; 15.01.2018
comment
Что вы пробовали? Вы сами успешно построили провайдер mbox? - person Bill Shannon; 16.01.2018
comment
@VikramGulia Я добавил в вопрос фрагмент кода, показывающий, как получать сообщения. - person Xipo; 23.01.2018
comment
@BillShannon да, я смог успешно собрать банку для MBOX. спасибо проверю. - person Vikram Gulia; 26.01.2018
comment
@BillShannon Когда я пытаюсь выполнить сборку, используя инструкции по вашей ссылке, я получаю следующую ошибку: Не удалось разрешить зависимости для проекта com.sun.mail:libmbox:so:1.6.1: Не удалось найти артефакт com.sun.mail:mbox :jar:1.6.1 в центральном (repo.maven.apache.org/maven2). Я тоже не могу найти libmbox... он был перемещен? - person Jess the Mess; 04.06.2018
comment
Ни один из них не публикуется в центре Maven, вы должны создавать их локально. Что именно вы сделали для их создания и какой именно результат вы получили? Отправьте подробности по электронной почте на адрес [email protected], если вам так удобнее. - person Bill Shannon; 04.06.2018

Это можно сделать с помощью 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>
person Black    schedule 20.03.2018
comment
Интересно. Я пробовал это, но в каждом случае, указывающем на файл mbox, я получал исключение Operation Not Permitted. (обратите внимание: перед компиляцией этого кода вам необходимо загрузить отдельно MboxIterator и пару других классов). - person Morkus; 28.02.2019