При каких обстоятельствах Folder.create () из javax.mail возвращает false? - PullRequest
1 голос
/ 23 июля 2010

Я пытаюсь, чтобы приложение Java для обработки электронной почты перемещало все обработанные письма из папки входящих сообщений IMAP в подпапку.Если эта подпапка не существует, она должна создать ее.Этот последний бит - то, что не работает.

Фрагмент кода:

private void _backupMessage(Message msg, Folder folder, String sBackupFolderName) throws MessagingException
{
    Folder backupFolder = folder.getFolder(sBackupFolderName);
    if (!backupFolder.exists()) {
        boolean f = backupFolder.create(Folder.HOLDS_FOLDERS & Folder.HOLDS_MESSAGES);
        if (!f) {
            this._triggerFaultEvent(new RuntimeException("Could not create backup folder."));
        }
    }
    backupFolder.open(Folder.READ_WRITE);
    folder.copyMessages(new Message[] { msg }, backupFolder);
    backupFolder.close(true);
}

Соответствующий Javadoc здесь здесь , но он действительно ничего не говоритза исключением того, что если create () возвращает false, папка не была создана (сюрприз, сюрприз).

Мне удалось создать папку с помощью Thunderbird с той же учетной записью.

Myпочтовый сервер (Postfix) не показывал никаких записей в журнале, кроме тех случаев, когда он не мог найти новую папку.В соответствующем модульном тесте фиктивный почтовый сервер (GreenMail) либо работает, либо игнорирует команду, в любом случае тест проходит успешно.

Ответы [ 2 ]

3 голосов
/ 23 июля 2010

Прежде всего, Postfix не является сервером IMAP.Должна быть другая программа, обслуживающая IMAP, и именно здесь нужно проверять журналы, а не Postfix.

Когда возвращается ровно false, зависит от реализации.Реализация Javamail SUN вернет false, если команда

  1. IMAP для создания папки не удалась, ИЛИ
  2. Команда IMAP была успешной, но папка все еще не существует, как проверено с Существует (), ИЛИ
  3. Если вы запрашиваете папку, которая может содержать подпапки, он также проверит, что созданная папка не имеет флаг \Noinferiors.Это связано с тем, что некоторые серверы IMAP не поддерживают папки как с сообщениями, так и с подпапками.

Я предлагаю вам получить исходный код для реализации и выполнить его с помощью отладчика.Вероятно, это самый быстрый способ узнать, что именно не так.

2 голосов
/ 08 ноября 2013

Внимание:

Folder.HOLDS_MESSAGES == 1

Folder.HOLDS_FOLDERS == 2

Folder.HOLDS_FOLDERS & Folder.HOLDS_MESSAGES == 0 (всегда)

Вы можете попробовать: Folder.HOLDS_FOLDERS | Folder.HOLDS_MESSAGES, что равно 3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...