Travailler avec les dossiers sur le serveur IMAP

Obtention des informations sur les dossiers

Obtenir des informations sur les dossiers d’un serveur IMAP est très simple avec Aspose.Email. Appelez le listFolders() méthode du ImapClient classe. Elle renvoie un objet du ImapFolderInfoCollection type. Parcourez cette collection et obtenez des informations sur les dossiers individuels dans une boucle. La méthode est surchargée. Vous pouvez passer un nom de dossier en paramètre pour obtenir la liste des sous‑dossiers. Le fragment de code suivant montre comment obtenir les informations d’un dossier depuis un serveur IMAP en utilisant la méthode Aspose.Email décrite.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Get all folders in the currently subscribed folder
ImapFolderInfoCollection folderInfoColl = client.listFolders();

// Iterate through the collection to get folder info one by one
for (ImapFolderInfo folderInfo : (Iterable<ImapFolderInfo>) folderInfoColl) {
    // Folder name and get New messages in the folder
    System.out.println("Folder name is " + folderInfo.getName());
    ImapFolderInfo folderExtInfo = client.getFolderInfo(folderInfo.getName());
    System.out.println("New message count: " + folderExtInfo.getNewMessageCount());
    System.out.println("Is it readonly? " + folderExtInfo.getReadOnly());
    System.out.println("Total number of messages " + folderExtInfo.getTotalMessageCount());
}

Suppression et renommage de dossiers

Un dossier sur un serveur IMAP peut être supprimé ou renommé en une seule ligne avec Aspose.Email :

  • Le deleteFolder() méthode accepte le nom du dossier en paramètre.
  • Pour le renameFolder() méthode, vous devez fournir le nom du dossier actuel et le nouveau nom de dossier. Le fragment de code suivant montre comment supprimer un dossier d’un serveur IMAP, et comment renommer un dossier. Chaque opération s’effectue avec une ligne de code.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Delete a folder and Rename a folder
client.deleteFolder("foldername");
client.renameFolder("foldername", "newfoldername");

Ajout d’un nouveau message dans un dossier

Vous pouvez ajouter un nouveau message au dossier en utilisant le MailMessage et ImapClient classes. Tout d’abord, créez un MailMessage objet en fournissant les valeurs du sujet, du destinataire et de l’expéditeur. Ensuite abonnez-vous à un dossier et ajoutez le message. Le fragment de code suivant montre comment ajouter un nouveau message à un dossier.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Create a message
MailMessage msg = new MailMessage("user@domain1.com", "user@domain2.com", "subject", "message");

// Subscribe to the Inbox folder and Append the newly created message
client.selectFolder(ImapFolderInfo.IN_BOX);
client.subscribeFolder(client.getCurrentFolder().getName());
client.appendMessage(client.getCurrentFolder().getName(), msg);

Ajouter plusieurs messages avec le support MultiConnection

Vous pouvez ajouter plusieurs messages en utilisant le appendMessages méthode fournie par le ImapClient classe. Le appendMessages méthode accepte une liste de MailMessage et l’ajoute au dossier actuel si le dossier n’est pas fourni en paramètre. ImapClient prend également en charge le mode MultiConnection pour les opérations lourdes. Le fragment de code suivant montre comment ajouter plusieurs messages en utilisant le mode MultiConnection.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
ImapClient imapClient = new ImapClient();
imapClient.setHost("<HOST>");
imapClient.setPort(993);
imapClient.setUsername("<USERNAME>");
imapClient.setPassword("<PASSWORD>");
imapClient.setSupportedEncryption(EncryptionProtocols.Tls);
imapClient.setSecurityOptions(SecurityOptions.SSLImplicit);

List<MailMessage> messages = new ArrayList<MailMessage>();
for (int i = 0; i < 20; i++) {
    MailMessage message = new MailMessage("<EMAIL ADDRESS>", "<EMAIL ADDRESS>", "Test Message - " + UUID.randomUUID().toString(), "IMAP Group Append with MultiConnection");
    messages.add(message);
}

imapClient.setConnectionsQuantity(5);
imapClient.setUseMultiConnection(MultiConnectionMode.Enable);
imapClient.appendMessages(messages);

Déplacer les messages vers un autre dossier de boîte aux lettres

Aspose.Email for Java permet de déplacer un message d’un dossier de boîte aux lettres à un autre en utilisant le ImapClient API. Le moveMessage La méthode utilise l’identifiant unique du message et le nom du dossier de destination pour déplacer un message vers le dossier de destination. Le fragment de code suivant montre comment déplacer des messages vers un autre dossier de boîte aux lettres.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// This example shows how to move a message from one folder of a mailbox to another one using the ImapClient API of Aspose.Email for Java
// Available from Aspose.Email for Java onwards
// -------------- Available API Overload Members --------------
// void ImapClient.moveMessage(IConnection iConnection, int sequenceNumber, String folderName, boolean commitDeletions)
// void ImapClient.moveMessage(IConnection iConnection, String uniqueId, String folderName, boolean commitDeletions)
// void ImapClient.moveMessage(int sequenceNumber, String folderName, boolean commitDeletions)
// void ImapClient.moveMessage(String uniqueId, String folderName, boolean commitDeletions)
// void ImapClient.moveMessage(IConnection iConnection, int sequenceNumber, String folderName)
// void ImapClient.moveMessage(IConnection iConnection, String uniqueId, String folderName)
// void ImapClient.moveMessage(int sequenceNumber, String folderName)
// void ImapClient.moveMessage(String uniqueId, String folderName)

final ImapClient client = new ImapClient("host.domain.com", 993, "username", "password");
try {
    String folderName = "EMAILNET-35151";
    if (!client.existFolder(folderName))
        client.createFolder(folderName);
    try {
        MailMessage message = new MailMessage("from@domain.com", "to@domain.com", "EMAILNET-35151 - " + UUID.randomUUID(),
                "EMAILNET-35151 ImapClient: Provide option to Move Message");
        client.selectFolder(ImapFolderInfo.IN_BOX);
        // Append the new message to Inbox folder
        String uniqueId = client.appendMessage(ImapFolderInfo.IN_BOX, message);
        ImapMessageInfoCollection messageInfoCol1 = client.listMessages();
        System.out.println(messageInfoCol1.size());
        // Now move the message to the folder EMAILNET-35151
        client.moveMessage(uniqueId, folderName);
        client.commitDeletes();
        // Verify that the message was moved to the new folder
        client.selectFolder(folderName);
        messageInfoCol1 = client.listMessages();
        System.out.println(messageInfoCol1.size());
        // Verify that the message was moved from the Inbox
        client.selectFolder(ImapFolderInfo.IN_BOX);
        messageInfoCol1 = client.listMessages();
        System.out.println(messageInfoCol1.size());
    } finally {
        try {
            client.deleteFolder(folderName);
        } catch (java.lang.RuntimeException e) {
        }
    }
} finally {
    if (client != null)
        client.dispose();
}

Copier les messages vers un autre dossier de boîte aux lettres

L’API Aspose.Email fournit la capacité de copier un message d’un dossier de boîte aux lettres à un autre. Elle permet de copier un seul message ainsi que plusieurs messages en utilisant le copyMessage et copyMessages méthodes. Le copyMessages méthode offre la capacité de copier plusieurs messages du dossier source d’une boîte aux lettres vers le dossier de destination. Le fragment de code suivant montre comment copier des messages vers un autre dossier de boîte aux lettres.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
final ImapClient client = new ImapClient("exchange.aspose.com", "username", "password");
try {
    // Create the destination folder
    String folderName = "EMAILNET-35242";
    if (!client.existFolder(folderName))
        client.createFolder(folderName);
    try {
        // Append a couple of messages to the server
        MailMessage message1 = new MailMessage("asposeemail.test3@aspose.com", "asposeemail.test3@aspose.com", "EMAILNET-35242 - " + UUID.randomUUID(),
                "EMAILNET-35242 Improvement of copy method.Add ability to 'copy' multiple messages per invocation.");
        String uniqueId1 = client.appendMessage(message1);

        MailMessage message2 = new MailMessage("asposeemail.test3@aspose.com", "asposeemail.test3@aspose.com", "EMAILNET-35242 - " + UUID.randomUUID(),
                "EMAILNET-35242 Improvement of copy method.Add ability to 'copy' multiple messages per invocation.");
        String uniqueId2 = client.appendMessage(message2);

        // Verify that the messages have been added to the mailbox
        client.selectFolder(ImapFolderInfo.IN_BOX);
        ImapMessageInfoCollection msgsColl = client.listMessages();
        for (ImapMessageInfo msgInfo : msgsColl)
            System.out.println(msgInfo.getSubject());

        // Copy multiple messages using the CopyMessages command and Verify that messages are copied to the destination folder
        client.copyMessagesByUids(Arrays.asList(uniqueId1, uniqueId2), folderName);

        client.selectFolder(folderName);
        msgsColl = client.listMessages();
        for (ImapMessageInfo msgInfo : msgsColl)
            System.out.println(msgInfo.getSubject());
    } finally {
        try {
            client.deleteFolder(folderName);
        } catch (java.lang.RuntimeException e) {
        }
    }
} finally {
    if (client != null)
        client.dispose();
}

Travailler avec les dossiers de boîtes aux lettres à usage spécial

Certaines boutiques de messages IMAP comprennent des boîtes aux lettres à usage spécial, comme celles utilisées pour stocker les brouillons ou les messages envoyés. De nombreux clients de messagerie permettent aux utilisateurs de spécifier où les brouillons ou les messages envoyés doivent être placés, mais leur configuration nécessite que l’utilisateur connaisse les boîtes aux lettres réservées à ces fins par le serveur. Aspose.Email peut identifier ces boîtes aux lettres à usage spécial en utilisant le ImapMailboxInfo classe pour faciliter leur utilisation. L’exemple de code suivant montre comment accéder à ces boîtes aux lettres à usage spécial en utilisant le ImapMailboxInfo classe.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
ImapClient imapClient = new ImapClient();
imapClient.setHost("<HOST>");
imapClient.setPort(993);
imapClient.setUsername("<USERNAME>");
imapClient.setPassword("<PASSWORD>");
imapClient.setSupportedEncryption(EncryptionProtocols.Tls);
imapClient.setSecurityOptions(SecurityOptions.SSLImplicit);

ImapMailboxInfo mailboxInfo = imapClient.getMailboxInfo();
System.out.println(mailboxInfo.getInbox());
System.out.println(mailboxInfo.getDraftMessages());
System.out.println(mailboxInfo.getJunkMessages());
System.out.println(mailboxInfo.getSentMessages());
System.out.println(mailboxInfo.getTrash());