Lavorare con le cartelle su server IMAP

Ottenere informazioni sulle cartelle

Ottenere informazioni sulle cartelle da un server IMAP è molto semplice con Aspose.Email. Chiama il listFolders() metodo del ImapClient classe. Restituisce un oggetto del ImapFolderInfoCollection tipo. Itera attraverso questa collezione e ottieni informazioni sulle singole cartelle in un ciclo. Il metodo è sovraccaricato. Puoi passare un nome di cartella come parametro per ottenere un elenco di sottocartelle. Il seguente frammento di codice mostra come ottenere informazioni sulle cartelle da un server IMAP usando il metodo Aspose.Email descritto.

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

Eliminare e rinominare cartelle

Una cartella su un server IMAP può essere eliminata o rinominata in una singola riga con Aspose.Email:

  • Il deleteFolder() metodo accetta il nome della cartella come parametro.
  • Per il renameFolder() metodo, è necessario passare il nome della cartella corrente e il nuovo nome della cartella. Il seguente frammento di codice mostra come rimuovere una cartella da un server IMAP e come rinominare una cartella. Ogni operazione è eseguita con una singola riga di codice.
// 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");

Aggiungere un nuovo messaggio in una cartella

Puoi aggiungere un nuovo messaggio alla cartella usando il MailMessage e ImapClient classi. Prima, crea un MailMessage oggetto fornendo i valori dell’oggetto, a e da. Poi iscriversi a una cartella e aggiungere il messaggio. Il seguente frammento di codice mostra come aggiungere un nuovo messaggio a una cartella.

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

Aggiungere più messaggi con supporto MultiConnection

Puoi aggiungere più messaggi usando il appendMessages metodo fornito dal ImapClient classe. Il appendMessages il metodo accetta un elenco di MailMessage e lo aggiunge alla cartella corrente se la cartella non è fornita come parametro. ImapClient supporta anche la modalità MultiConnection per operazioni ad alto carico. Il seguente frammento di codice mostra come aggiungere più messaggi usando la modalità 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);

Sposta i messaggi in un’altra cartella della casella di posta

Aspose.Email per Java consente di spostare un messaggio da una cartella della casella di posta a un’altra utilizzando il ImapClient API. La moveMessage Il metodo utilizza l’ID univoco del messaggio e il nome della cartella di destinazione per spostare un messaggio nella cartella di destinazione. Il seguente frammento di codice mostra come spostare i messaggi in un’altra cartella della casella di posta.

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

Copia i messaggi in un’altra cartella della casella di posta

L’API Aspose.Email fornisce la capacità di copiare un messaggio da una cartella di posta a un’altra. Consente di copiare sia un singolo sia più messaggi usando il copyMessage e copyMessages metodi. Il copyMessages il metodo fornisce la capacità di copiare più messaggi dalla cartella di origine di una casella alla cartella di destinazione. Il seguente frammento di codice mostra come copiare i messaggi in un’altra cartella di posta.

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

Lavorare con le cartelle di caselle di posta ad uso speciale

Alcuni archivi di messaggi IMAP includono caselle di posta ad uso speciale, come quelle per bozze o messaggi inviati. Molti client di posta consentono agli utenti di specificare dove posizionare le bozze o i messaggi inviati, ma la configurazione richiede che l’utente conosca quali caselle il server ha riservato a tali scopi. Aspose.Email può identificare queste caselle ad uso speciale usando il ImapMailboxInfo classe per semplificare il lavoro con esse. Il seguente esempio di codice dimostra come accedere a queste caselle di posta ad uso speciale usando il 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());