Arbeta med mappar på IMAP‑servern

Hämta mappinformation

Att hämta information om mappar från en IMAP‑server är väldigt enkelt med Aspose.Email. Anropa listFolders() metod för ImapClient klass. Den returnerar ett objekt av ImapFolderInfoCollection typ. Iterera genom denna samling och hämta information om enskilda mappar i en loop. Metoden är överlagrad. Du kan ange ett mappnamn som parameter för att få en lista över undermappar. Följande kodavsnitt visar hur du får mapinformation från en IMAP‑server med den beskrivna Aspose.Email‑metoden.

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

Ta bort och byta namn på mappar

En mapp på en IMAP‑server kan tas bort eller byta namn i en enda rad med Aspose.Email:

  • Den deleteFolder() metod accepterar mappnamnet som parameter.
  • För renameFolder() metod, du måste ange det aktuella mappnamnet och det nya mappnamnet. Följande kodavsnitt visar hur du tar bort en mapp från en IMAP‑server och hur du byter namn på en mapp. Varje operation utförs med en kodrad.
// 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");

Lägga till ett nytt meddelande i en mapp

Du kan lägga till ett nytt meddelande i mappen med hjälp av MailMessage och ImapClient klasser. Skapa först en MailMessage objekt genom att ange ämne, till‑ och från‑värden. Prenumerera sedan på en mapp och lägg till meddelandet i den. Följande kodavsnitt visar hur du lägger till ett nytt meddelande i en mapp.

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

Lägg till flera meddelanden med MultiConnection‑stöd

Du kan lägga till flera meddelanden genom att använda appendMessages metod tillhandahållen av ImapClient klass. Den appendMessages metod accepterar en lista av MailMessage och lägger till den i den aktuella mappen om mappen inte anges som parameter. ImapClient stöder även MultiConnection‑läge för tunga operationer. Följande kodavsnitt visar hur du lägger till flera meddelanden med MultiConnection‑läget.

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

Flytta meddelanden till en annan brevlådemapp

Aspose.Email för Java tillåter att flytta ett meddelande från en brevlådemapp till en annan med hjälp av ImapClient API. Det moveMessage metoden använder meddelandets unika id och destinationsmappens namn för att flytta ett meddelande till destinationsmappen. Följande kodexempel visar hur du flyttar meddelanden till en annan brevlådemapp.

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

Kopiera meddelanden till en annan brevlådemapp

Aspose.Email‑API ger möjlighet att kopiera ett meddelande från en brevlådemapp till en annan. Den möjliggör kopiering av både ett enskilt och flera meddelanden med hjälp av copyMessage och copyMessages metoder. Den copyMessages metod ger möjlighet att kopiera flera meddelanden från källmappen i en brevlåda till destinationsmappen i en annan brevlåda. Följande kodavsnitt visar hur du kopierar meddelanden till en annan brevlådemapp.

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

Arbeta med specialanvända brevlådemappar

Vissa IMAP‑meddelandelager inkluderar specialanvända brevlådor, såsom de som används för utkast eller skickade meddelanden. Många e‑postklienter låter användare specificera var utkast eller skickade meddelanden ska lagras, men konfigurationen kräver att användaren vet vilka brevlådor servern har avsatt för dessa ändamål. Aspose.Email kan identifiera dessa specialanvända brevlådor med hjälp av ImapMailboxInfo klass för att underlätta arbetet med dem. Följande kodexempel visar hur du får åtkomst till dessa specialanvända brevlådor med hjälp av ImapMailboxInfo klass.

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