Учебники

JavaMail API — управление папками

До сих пор мы работали в наших предыдущих главах в основном с папкой INBOX. Это папка по умолчанию, в которой находится большая часть почты. Некоторые системы могут называть его как INBOX, а другие могут называть его другим именем. Но вы всегда можете получить к нему доступ через API JavaMail, используя имя INBOX.

JavaMail API представляет папки как экземпляры абстрактного класса Folder:

public abstract class Folder extends Object

Этот класс объявляет методы для запроса именованных папок с серверов, удаления сообщений из папок, поиска определенных сообщений в папках, перечисления сообщений в папке и т. Д.

Открытие папки

Мы не можем создать папку напрямую, так как единственный конструктор в классе Folder защищен . Мы можем получить папку из:

  • сессия

  • магазин

  • или другая папка

сессия

магазин

или другая папка

Все вышеперечисленные классы имеют похожий метод getFolder () с похожей подписью:

public abstract Folder getFolder(String name) throws MessagingException

Некоторые методы, которые помогают в получении объекта Folder :

метод Описание
логическое существует () Проверяет, действительно ли папка существует. Используйте этот метод перед получением объекта Folder.
аннотация void open (режим int) Когда вы получаете папку , она закрыта. Используйте этот метод, чтобы открыть его. режим может быть Folder.READ_ONLY или Folder.READ_WRITE.
абстрактный логический isOpen () Этот метод возвращает истину, если папка открыта, ложь, если она закрыта
абстрактный void закрыть (логическое выражение) Закрывает папку. Если аргумент expunge имеет значение true , все удаленные сообщения в папке удаляются из фактического файла на сервере. В противном случае они просто помечаются как удаленные , но сообщения все еще можно восстановить.

Основная информация о папке

Ниже приведены некоторые методы класса Folder, которые возвращают основную информацию о папке:

метод Описание
абстрактная строка getName () Возвращает имя папки, например, «TutorialsPoint Mail»
абстрактная строка getFullName () Возвращает полное иерархическое имя из корня, например «books / Manisha / TutorialsPoint Mail».
URLName getURLName () Вернуть URLName, представляющее эту папку.
абстрактный папка getParent () Возвращает имя папки, которая содержит эту папку, т.е. родительскую папку. Например, «Manisha» из предыдущего примера «TutorialsPoint Mail».
abstract int getType () Возвращает int, указывающий, может ли папка содержать сообщения и / или другие папки.
int getMode () Возвращает одну из двух именованных констант Folder.READ_ONLY или Folder.READ_WRITE или -1, если режим неизвестен.
Магазин getStore () Возвращает объект Store, из которого была извлечена эта папка.
абстрактный символ getSeparator () Вернуть символ разделителя, который отделяет путь к этой папке от имен ближайших подпапок.

Управление папкой

Ниже приведены некоторые методы, которые помогают управлять папкой:

метод Описание
абстрактное логическое создание (тип int) Это создаст новую папку в хранилище этой папки. Где тип будет: Folder.HOLDS_MESSAGES или Folder.HOLDS_FOLDERS. Возвращает true, если папка успешно создана, иначе возвращает false .
абстрактный логический удалить (булев рекурс) Это удаляет папку, только если папка закрыта. В противном случае он создает исключение IllegalStateException . Если значение recurse равно true , подпапки удаляются.
абстрактный логическое переименование (папка f) Это меняет имя этой папки. Папка должна быть закрыта для переименования. В противном случае создается исключение IllegalStateException.

Управление сообщениями в папках

Ниже приведены некоторые методы, которые помогают управлять сообщениями в папке:

метод Описание
abstract void appendMessages (Message [] messages) Как следует из названия, сообщения в массиве размещаются в конце этой папки.
void copyMessages (сообщения [] сообщения, назначение папки) Это копирует сообщения из этой папки в указанную папку, заданную в качестве аргумента.
абстрактное сообщение [] expunge () Чтобы удалить сообщение из папки, установите для его флага Flags.Flag.DELETED значение true. Чтобы физически удалить удаленные сообщения из папки, вы должны вызвать этот метод.

Перечисление содержимого папки

Существует четыре способа составления списка папок, которые содержит папка:

метод Описание
Папка [] list () Это возвращает массив, перечисляющий папки, которые содержит эта папка.
Папка [] listSubscribeed () Это возвращает массив, перечисляющий все подписанные папки, которые содержит эта папка.
абстрактный список папок [] (строковый шаблон) Это похоже на метод list () за исключением того, что он позволяет вам указать шаблон. Шаблон представляет собой строку, в которой указаны имена соответствующих папок.
Папка [] listSubscribeed (образец строки) Это похоже на метод listSubscribeed () за исключением того, что он позволяет вам указать шаблон. Шаблон представляет собой строку, в которой указаны имена соответствующих папок.

Проверка на почту

метод Описание
abstract int getMessageCount () Этот метод может быть вызван в открытой или закрытой папке. Однако в случае закрытой папки этот метод может (или не может) возвращать -1, чтобы указать, что точное количество сообщений не всегда легко доступно.
абстрактный логический hasNewMessages () Возвращает значение true, если новые сообщения были добавлены в папку с момента ее последнего открытия.
int getNewMessageCount () Он возвращает счетчик новых сообщений, проверяя сообщения в папке, для которой установлен флаг RECENT.
int getUnreadMessageCount () Это может быть вызвано в открытой или закрытой папке. Однако в случае закрытой папки он может возвращать -1, чтобы указать, что реальный ответ будет слишком дорогим для получения.

Получение сообщений из папок

Класс Folder предоставляет четыре метода для получения сообщений из открытых папок:

метод Описание
абстрактное сообщение getMessage (int messageNumber) Это возвращает n-е сообщение в папке. Первое сообщение в папке номер 1.
Сообщение [] getMessages () Это возвращает массив объектов Message, представляющих все сообщения в этой папке.
Сообщение [] getMessages (int start, int end) Это возвращает массив объектов Message из папки, начиная с начала и заканчивая концом включительно.
Сообщение [] getMessages (int [] messageNumbers) Это возвращает массив, содержащий только те сообщения, которые конкретно определены по номеру в массиве messageNumbers .
void fetch (Message [] messages, FetchProfile fp) Предварительная выборка элементов, указанных в FetchProfile для данных сообщений. Аргумент FetchProfile указывает, какие заголовки в сообщениях следует предварительно выбирать.

Поиск папок

Если сервер поддерживает поиск (как это делают многие серверы IMAP, а большинство серверов POP — нет), можно легко найти в папке сообщения, отвечающие определенным критериям. Критерии закодированы в объектах SearchTerm. Ниже приведены два метода поиска:

метод Описание
Поиск сообщения [] (термин SearchTerm) Поиск в этой папке сообщений, соответствующих указанному критерию поиска. Возвращает массив, содержащий соответствующие сообщения. Возвращает пустой массив, если совпадений не найдено.
Поиск сообщения [] (термин SearchTerm, сообщения Message []) Поиск в указанном массиве сообщений для тех, которые соответствуют указанному критерию поиска. Возвращает массив, содержащий соответствующие сообщения. Возвращает пустой массив, если совпадений не найдено. Указанные объекты сообщения должны принадлежать этой папке.

Флаги

Изменение флага полезно, когда вам нужно изменить флаги для всего набора сообщений в папке. Ниже приведены методы, предоставляемые в классе Folder: