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

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

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

public abstract class Folder extends Object

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

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

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

  • сессия

  • склад

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

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

public abstract Folder getFolder(String name) throws MessagingException

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

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

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

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

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

Папка управления

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

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

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

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

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

Список содержимого папки

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

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

Проверка почты

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

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

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

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

Поиск в папках

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

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

Флаги

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

Метод Описание
void setFlags (сообщения [] сообщения, флаг флагов, логическое значение) Устанавливает указанные флаги для сообщений, указанных в массиве.
void setFlags (int start, int end, флаг флагов, логическое значение) Устанавливает указанные флаги для сообщений, пронумерованных от начала до конца, включая начало и конец.
void setFlags (int [] messageNumbers, флаг флагов, логическое значение) Устанавливает указанные флаги для сообщений, номера сообщений которых находятся в массиве.
абстрактные флаги getPermanentFlags () Возвращает флаги, которые эта папка поддерживает для всех сообщений.