Gestisci, sposta e organizza le cartelle IMAP

Operazioni sulle cartelle

Ottieni informazioni sulla cartella

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 collection e ottieni informazioni sulle singole cartelle in un ciclo. Il metodo è sovraccaricato. Puoi passare il nome di una cartella come parametro per ottenere un elenco di sottocartelle. Il frammento di codice seguente mostra come ottenere informazioni sulle cartelle da un server IMAP usando Aspose.Email con il metodo descritto nelle informazioni.

// Get all folders in the currently subscribed folder
ImapFolderInfoCollection folderInfoColl = client.ListFolders();

// Iterate through the collection to get folder info one by one
foreach (ImapFolderInfo folderInfo in folderInfoColl)
{
    // Folder name and get New messages in the folder
    Console.WriteLine("Folder name is " + folderInfo.Name);
    ImapFolderInfo folderExtInfo = client.GetFolderInfo(folderInfo.Name);
    Console.WriteLine("New message count: " + folderExtInfo.NewMessageCount);
    Console.WriteLine("Is it readonly? " + folderExtInfo.ReadOnly);
    Console.WriteLine("Total number of messages " + folderExtInfo.TotalMessageCount);
}

Elimina e rinomina 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.
// Delete a folder and Rename a folder
client.DeleteFolder("foldername");
client.RenameFolder("foldername", "newfoldername");

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.

ImapClient imapClient = new ImapClient();
imapClient.Host = "<HOST>";
imapClient.Port = 993;
imapClient.Username = "<USERNAME>";
imapClient.Password = "<PASSWORD>";
imapClient.SupportedEncryption = EncryptionProtocols.Tls;
imapClient.SecurityOptions = SecurityOptions.SSLImplicit;
            
ImapMailboxInfo mailboxInfo = imapClient.MailboxInfo;
Console.WriteLine(mailboxInfo.Inbox);
Console.WriteLine(mailboxInfo.DraftMessages);
Console.WriteLine(mailboxInfo.JunkMessages);
Console.WriteLine(mailboxInfo.SentMessages);
Console.WriteLine(mailboxInfo.Trash);

Operazioni sui messaggi all’interno delle cartelle

Aggiungi un nuovo messaggio a una cartella

Puoi aggiungere un nuovo messaggio a una cartella usando il MailMessage e ImapClient classi. Prima crea un MailMessage oggetto fornendo i valori di oggetto, destinatario e mittente. Quindi sottoscrivi una cartella e aggiungi il messaggio. Il frammento di codice seguente mostra come aggiungere un nuovo messaggio in una cartella.

// 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.InBox);
client.SubscribeFolder(client.CurrentFolder.Name);
client.AppendMessage(client.CurrentFolder.Name, msg);

Aggiungi più messaggi con MultiConnection

Puoi aggiungere più messaggi usando il AppendMessages metodo fornito dal ImapClient classi. 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.

ImapClient imapClient = new ImapClient();
imapClient.Host = "<HOST>";
imapClient.Port = 993;
imapClient.Username = "<USERNAME>";
imapClient.Password = "<PASSWORD>";
imapClient.SupportedEncryption = EncryptionProtocols.Tls;
imapClient.SecurityOptions = SecurityOptions.SSLImplicit;

List<MailMessage> messages = new List<MailMessage>();
for (int i = 0; i < 20; i++)
{
    MailMessage message = new MailMessage(
        "<EMAIL ADDRESS>",
        "<EMAIL ADDRESS>",
        "Test Message - " + Guid.NewGuid().ToString(),
        "IMAP Group Append with MultiConnection");
    messages.Add(message);
}

imapClient.ConnectionsQuantity = 5;
imapClient.UseMultiConnection = MultiConnectionMode.Enable;
imapClient.AppendMessages(messages);

Spostare messaggi tra cartelle

Aspose.Email per .NET consente di spostare messaggi da una cartella della casella di posta a un’altra usando 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.

///<summary>
/// 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 .NET
/// Available from Aspose.Email for .NET 6.4.0 onwards
/// -------------- Available API Overload Members --------------
/// Void ImapClient.MoveMessage(IConnection iConnection, int sequenceNumber, string folderName, bool commitDeletions)
/// Void ImapClient.MoveMessage(IConnection iConnection, string uniqueId, string folderName, bool commitDeletions)
/// Void ImapClient.MoveMessage(int sequenceNumber, string folderName, bool commitDeletions)
/// Void ImapClient.MoveMessage(string uniqueId, string folderName, bool 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)
///</summary>

using (ImapClient client = new ImapClient("host.domain.com", 993, "username", "password"))
{
    string folderName = "EMAILNET-35151";
    if (!client.ExistFolder(folderName))
        client.CreateFolder(folderName);
    try
    {
        MailMessage message = new MailMessage(
            "from@domain.com",
            "to@domain.com",
            "EMAILNET-35151 - " + Guid.NewGuid(),
            "EMAILNET-35151 ImapClient: Provide option to Move Message");
        client.SelectFolder(ImapFolderInfo.InBox);
        // Append the new message to Inbox folder
        string uniqueId = client.AppendMessage(ImapFolderInfo.InBox, message);
        ImapMessageInfoCollection messageInfoCol1 = client.ListMessages();
        Console.WriteLine(messageInfoCol1.Count);
        // 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();
        Console.WriteLine(messageInfoCol1.Count);
        // Verify that the message was moved from the Inbox
        client.SelectFolder(ImapFolderInfo.InBox);
        messageInfoCol1 = client.ListMessages();
        Console.WriteLine(messageInfoCol1.Count);
    }
    finally
    {
        try { client.DeleteFolder(folderName); }
        catch { }
    }
}

Copia messaggi tra cartelle

L’API Aspose.Email fornisce la capacità di copiare messaggi da una cartella della casella di posta a un’altra. Consente di copiare sia un singolo che più messaggi usando il CopiaMessaggio 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.

using (ImapClient client = new ImapClient("exchange.aspose.com", "username", "password"))
{
    // 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 - " + Guid.NewGuid(),
            "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 - " + Guid.NewGuid(),
            "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.InBox);
        ImapMessageInfoCollection msgsColl = client.ListMessages();
        foreach (ImapMessageInfo msgInfo in msgsColl)
            Console.WriteLine(msgInfo.Subject);

        // Copy multiple messages using the CopyMessages command and Verify that messages are copied to the destination folder
        client.CopyMessages(new[] { uniqueId1, uniqueId2 }, folderName);

        client.SelectFolder(folderName);
        msgsColl = client.ListMessages();
        foreach (ImapMessageInfo msgInfo in msgsColl)
            Console.WriteLine(msgInfo.Subject);
    }
    finally
    {
        try
        {
            client.DeleteFolder(folderName);
        }
        catch { }
    }
}