Werken met mappen op IMAP‑server

Mappeninformatie ophalen

Informatie over mappen van een IMAP‑server ophalen is zeer eenvoudig met Aspose.Email. Roep de listFolders() methode van de ImapClient klasse. Het retourneert een object van de ImapFolderInfoCollection type. Itereer door deze collectie en verkrijg informatie over individuele mappen in een lus. De methode is overloaded. Je kunt een mapnaam als parameter doorgeven om een lijst met submappen te krijgen. Het onderstaande codefragment laat zien hoe je mapinformatie van een IMAP‑server kunt ophalen met de beschreven Aspose.Email‑methode.

// 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());
}

Mappen verwijderen en hernoemen

Een map op een IMAP‑server kan met één regel verwijderd of hernoemd worden met Aspose.Email:

  • De deleteFolder() methode accepteert de mapnaam als parameter.
  • Voor de renameFolder() methode, moet je de huidige mapnaam en de nieuwe mapnaam doorgeven. Het onderstaande codefragment laat zien hoe je een map van een IMAP‑server verwijdert en hoe je een map hernoemt. Elke bewerking wordt uitgevoerd met één regel 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");

Een nieuw bericht toevoegen in een map

Je kunt een nieuw bericht aan de map toevoegen met behulp van de MailMessage en ImapClient klassen. Maak eerst een MailMessage object door het onderwerp, naar‑ en van‑waarden op te geven. Abonneer je vervolgens op een map en voeg het bericht toe. Het onderstaande codefragment laat zien hoe je een nieuw bericht aan een map toevoegt.

// 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);

Meerdere berichten toevoegen met MultiConnection‑ondersteuning

Je kunt meerdere berichten toevoegen met behulp van de appendMessages methode geleverd door de ImapClient klasse. De appendMessages methode accepteert een lijst van MailMessage en voegt het toe aan de huidige map als de map niet als parameter wordt opgegeven. ImapClient ondersteunt ook de MultiConnection‑modus voor zwaar belaste bewerkingen. Het onderstaande codefragment laat zien hoe je meerdere berichten kunt toevoegen met de MultiConnection‑modus.

// 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);

Berichten naar een andere postvakmap verplaatsen

Aspose.Email voor Java maakt het mogelijk een bericht van de ene postvakmap naar de andere te verplaatsen met behulp van de ImapClient API. De moveMessage methode gebruikt de unieke bericht-id en de naam van de doelmap om een bericht naar de doelmap te verplaatsen. De volgende code‑snippet laat zien hoe je berichten naar een andere postvakmap verplaatst.

// 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();
}

Berichten naar een andere postvakmap kopiëren

De Aspose.Email API biedt de mogelijkheid om een bericht van de ene mailboxmap naar een andere te kopiëren. Het staat toe één bericht of meerdere berichten te kopiëren met behulp van de copyMessage en copyMessages methoden. De copyMessages methode biedt de mogelijkheid om meerdere berichten van een bronmap van een mailbox naar de doelmailboxmap te kopiëren. Het onderstaande codefragment laat zien hoe je berichten naar een andere mailboxmap kopieert.

// 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();
}

Werken met speciale gebruiksmappen

Sommige IMAP‑berichtenopslagplaatsen bevatten speciale gebruiksmappen, zoals die voor conceptberichten of verzonden berichten. Veel e‑mailclients laten gebruikers specificeren waar concept‑ of verzonden berichten moeten worden geplaatst, maar het configureren hiervan vereist dat de gebruiker weet welke mailboxen de server hiervoor heeft gereserveerd. Aspose.Email kan deze speciale gebruiksmappen identificeren met behulp van de ImapMailboxInfo klasse om het werken met hen gemakkelijker te maken. Het volgende codevoorbeeld demonstreert hoe je toegang krijgt tot deze speciale gebruiksmappen met behulp van de ImapMailboxInfo klasse.

// 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());