API JavaMail - Gestion des dossiers

Jusqu'à présent, nous avons travaillé dans nos chapitres précédents principalement avec le dossier INBOX. Il s'agit du dossier par défaut dans lequel réside la plupart des e-mails. Certains systèmes peuvent l'appeler INBOX et d'autres peuvent l'appeler par un autre nom. Mais, vous pouvez toujours y accéder depuis l'API JavaMail en utilisant le nom INBOX.

L'API JavaMail représente les dossiers comme des instances de la classe abstraite Folder:

public abstract class Folder extends Object

Cette classe déclare des méthodes pour demander des dossiers nommés aux serveurs, supprimer des messages de dossiers, rechercher des messages particuliers dans des dossiers, répertorier les messages dans un dossier, etc.

Ouverture d'un dossier

Nous ne pouvons pas créer un dossier directement car le seul constructeur de la classe Folder est protégé . Nous pouvons obtenir un dossier à partir de:

  • une session

  • un magasin

  • ou un autre dossier

Toutes les classes ci-dessus ont une méthode getFolder () similaire avec une signature similaire:

public abstract Folder getFolder(String name) throws MessagingException

Certaines des méthodes qui aident à obtenir l' objet Folder sont:

Méthode La description
booléen existe () Vérifie si le dossier existe vraiment. Utilisez cette méthode avant d'obtenir l'objet Folder.
abstract void open (mode int) Lorsque vous obtenez un dossier , il est fermé. Utilisez cette méthode pour l'ouvrir. Le mode peut être Folder.READ_ONLY ou Folder.READ_WRITE.
abstrait booléen isOpen () Cette méthode retourne true si le dossier est ouvert, false s'il est fermé
abstract void close (suppression booléenne) Ferme le dossier. Si l' argument d' effacement est vrai , tous les messages supprimés dans le dossier sont supprimés du fichier réel sur le serveur. Sinon, ils sont simplement marqués comme supprimés , mais les messages peuvent toujours être restaurés.

Informations de base sur le dossier

Voici quelques-unes des méthodes de la classe Folder qui renvoient des informations de base sur un dossier:

Méthode La description
résumé String getName () Renvoie le nom du dossier, tel que "TutorialsPoint Mail"
résumé String getFullName () Renvoie le nom hiérarchique complet à partir de la racine, par exemple «books / Manisha / TutorialsPoint Mail».
URLName getURLName () Renvoie un URLName représentant ce dossier.
dossier abstrait getParent () Renvoie le nom du dossier contenant ce dossier, c'est-à-dire le dossier parent. Par exemple, "Manisha" de l'exemple précédent "TutorialsPoint Mail".
abstrait int getType () Renvoie un int indiquant si le dossier peut contenir des messages et / ou d'autres dossiers.
int getMode () Il renvoie l'une des deux constantes nommées Folder.READ_ONLY ou Folder.READ_WRITE ou -1 lorsque le mode est inconnu.
Magasin getStore () Renvoie l'objet Store à partir duquel ce dossier a été extrait.
caractère abstrait getSeparator () Renvoie le caractère de délimitation qui sépare le chemin d'accès de ce dossier des noms des sous-dossiers immédiats.

Gestion du dossier

Voici quelques-unes des méthodes qui aident à gérer le dossier:

Méthode La description
abstract boolean create (type int) Cela crée un nouveau dossier dans le magasin de ce dossier. Où le type serait: Folder.HOLDS_MESSAGES ou Folder.HOLDS_FOLDERS. Renvoie true si le dossier est créé avec succès, sinon renvoie false .
suppression booléenne abstraite (récurrence booléenne) Cela supprime le dossier uniquement si le dossier est fermé. Sinon, il lève une IllegalStateException . Si recurse est vrai , les sous-dossiers sont supprimés.
abstract boolean renameTo (dossier f) Cela change le nom de ce dossier. Un dossier doit être fermé pour être renommé. Sinon, une IllegalStateException est levée.

Gérer les messages dans les dossiers

Voici quelques-unes des méthodes qui aident à gérer les messages dans le dossier:

Méthode La description
abstract void appendMessages (Message [] messages) Comme son nom l'indique, les messages du tableau sont placés à la fin de ce dossier.
void copyMessages (Message [] messages, destination du dossier) Cela copie les messages de ce dossier dans un dossier spécifié donné en argument.
résumé Message [] expunge () Pour supprimer un message d'un dossier, définissez son indicateur Flags.Flag.DELETED sur true. Pour supprimer physiquement les messages supprimés d'un dossier, vous devez appeler cette méthode.

Liste du contenu d'un dossier

Il existe quatre méthodes pour répertorier les dossiers contenus dans un dossier:

Méthode La description
Liste des dossiers [] () Cela renvoie un tableau répertoriant les dossiers que ce dossier contient.
Dossier [] listSubscribed () Cela renvoie un tableau répertoriant tous les dossiers abonnés que ce dossier contient.
liste abstraite des dossiers [] (modèle de chaîne) Ceci est similaire à la méthode list () sauf qu'elle vous permet de spécifier un modèle. Le modèle est une chaîne donnant le nom des dossiers qui correspondent.
Folder [] listSubscribed (modèle de chaîne) Ceci est similaire à la méthode listSubscribed () sauf qu'elle vous permet de spécifier un modèle. Le modèle est une chaîne donnant le nom des dossiers qui correspondent.

Vérification du courrier

Méthode La description
résumé int getMessageCount () Cette méthode peut être appelée sur un dossier ouvert ou fermé. Cependant, dans le cas d'un dossier fermé, cette méthode peut (ou non) retourner -1 pour indiquer que le nombre exact de messages n'est pas facilement disponible.
résumé booléen hasNewMessages () Cela renvoie true si de nouveaux messages ont été ajoutés au dossier depuis sa dernière ouverture.
int getNewMessageCount () Il renvoie le nombre de nouveaux messages en vérifiant les messages dans le dossier dont l'indicateur RECENT est défini.
int getUnreadMessageCount () Cela peut être appelé sur un dossier ouvert ou fermé. Cependant, dans le cas d'un dossier fermé, il peut renvoyer -1 pour indiquer que la vraie réponse serait trop coûteuse à obtenir.

Obtenir des messages à partir de dossiers

La classe Folder fournit quatre méthodes pour récupérer des messages à partir de dossiers ouverts:

Méthode La description
Message abstrait getMessage (int messageNumber) Cela renvoie le nième message du dossier. Le premier message du dossier est le numéro 1.
Message [] getMessages () Cela renvoie un tableau d' objets Message représentant tous les messages de ce dossier.
Message [] getMessages (int start, int end) Cela renvoie un tableau d' objets Message du dossier, commençant par start et finissant par end, inclus.
Message [] getMessages (int [] messageNumbers) Cela renvoie un tableau contenant uniquement les messages spécifiquement identifiés par un nombre dans le tableau messageNumbers .
void fetch (Message [] messages, FetchProfile fp) Prérécupérez les éléments spécifiés dans le FetchProfile pour les messages donnés. L'argument FetchProfile spécifie les en-têtes des messages à pré-lire.

Recherche de dossiers

Si le serveur prend en charge la recherche (comme le font de nombreux serveurs IMAP et la plupart des serveurs POP), il est facile de rechercher dans un dossier les messages répondant à certains critères. Les critères sont encodés dans des objets SearchTerm. Voici les deux méthodes de recherche:

Méthode La description
Recherche de message [] (terme SearchTerm) Recherchez dans ce dossier les messages correspondant au critère de recherche spécifié. Renvoie un tableau contenant les messages correspondants. Renvoie un tableau vide si aucune correspondance n'a été trouvée.
Recherche de message [] (terme SearchTerm, message [] messages) Recherchez dans le tableau de messages donné ceux qui correspondent au critère de recherche spécifié. Renvoie un tableau contenant les messages correspondants. Renvoie un tableau vide si aucune correspondance n'a été trouvée. Les objets Message spécifiés doivent appartenir à ce dossier.

Drapeaux

La modification des indicateurs est utile lorsque vous devez modifier les indicateurs pour l'ensemble des messages d'un dossier. Voici les méthodes fournies dans la classe Folder:

Méthode La description
void setFlags (Message [] messages, indicateur Flags, valeur booléenne) Définit les indicateurs spécifiés sur les messages spécifiés dans le tableau.
void setFlags (début int, fin int, indicateur Flags, valeur booléenne) Définit les indicateurs spécifiés sur les messages numérotés du début à la fin, début et fin inclus.
void setFlags (int [] messageNumbers, indicateur Flags, valeur booléenne) Définit les indicateurs spécifiés sur les messages dont les numéros de message sont dans le tableau.
drapeaux abstraits getPermanentFlags () Renvoie les indicateurs que ce dossier prend en charge pour tous les messages.