Verwalten, Verschieben und Organisieren von IMAP-Ordnern

Ordneroperationen

Ordnerinformationen abrufen

Das Abrufen von Ordnerinformationen von einem IMAP-Server ist mit Aspose.Email sehr einfach. Rufen Sie die ListFolders() Methode des ImapClient Klasse. Sie gibt ein Objekt des ImapFolderInfoCollection Typ. Iterieren Sie durch diese Sammlung und erhalten Sie Informationen zu einzelnen Ordnern in einer Schleife. Die Methode ist überladen. Sie können einen Ordnernamen als Parameter übergeben, um eine Liste von Unterordnern zu erhalten. Das folgende Code‑Snippet zeigt, wie Sie Ordnerinformationen von einem IMAP-Server mit Aspose.Email mittels der beschriebenen Methode abrufen.

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

Ordner löschen und umbenennen

Ein Ordner auf einem IMAP-Server kann mit Aspose.Email in einer einzigen Zeile gelöscht oder umbenannt werden:

  • Die DeleteFolder() Methode akzeptiert den Ordnernamen als Parameter.
  • Für die RenameFolder() Methode, Sie müssen den aktuellen Ordnernamen und den neuen Ordnernamen übergeben. Das folgende Codefragment zeigt, wie man einen Ordner von einem IMAP-Server entfernt und wie man einen Ordner umbenennt. Jeder Vorgang wird mit einer Codezeile durchgeführt.
// Delete a folder and Rename a folder
client.DeleteFolder("foldername");
client.RenameFolder("foldername", "newfoldername");

Arbeiten mit Spezial‑Postfach‑Ordnern

Einige IMAP-Nachrichtenspeicher enthalten Spezialpostfächer, z. B. für Entwürfe oder gesendete Nachrichten. Viele E-Mail-Programme erlauben dem Benutzer anzugeben, wo Entwürfe oder gesendete Nachrichten abgelegt werden sollen, aber die Konfiguration erfordert, dass der Benutzer weiß, welche Postfächer der Server hierfür reserviert hat. Aspose.Email kann diese Spezialpostfächer mithilfe der ImapMailboxInfo Klasse, um die Arbeit mit ihnen zu erleichtern. Das folgende Codebeispiel zeigt, wie man auf diese Spezialpostfächer zugreift, indem man die ImapMailboxInfo Klasse.

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

Nachrichtenoperationen innerhalb von Ordnern

Eine neue Nachricht zu einem Ordner hinzufügen

Sie können eine neue Nachricht zu einem Ordner hinzufügen, indem Sie die MailMessage und ImapClient Klassen. Erstellen Sie zuerst ein MailMessage Objekt, indem Sie Betreff, An‑ und Von‑Werte angeben. Dann abonnieren Sie einen Ordner und fügen die Nachricht hinzu. Das folgende Code‑Snippet zeigt, wie Sie eine neue Nachricht in einem Ordner hinzufügen.

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

Mehrere Nachrichten mit MultiConnection hinzufügen

Sie können mehrere Nachrichten hinzufügen, indem Sie das AppendMessages Methode bereitgestellt von dem ImapClient Klassen. Die AppendMessages Methode akzeptiert eine Liste von MailMessage und fügt ihn dem aktuellen Ordner hinzu, falls kein Ordner als Parameter angegeben ist. ImapClient unterstützt außerdem den MultiConnection‑Modus für stark ausgelastete Vorgänge. Das folgende Codefragment zeigt, wie man mehrere Nachrichten mit dem MultiConnection‑Modus hinzufügt.

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

Nachrichten zwischen Ordnern verschieben

Aspose.Email für .NET ermöglicht das Verschieben von Nachrichten von einem Postfachordner zu einem anderen mithilfe der ImapClient API. Die MoveMessage Methode verwendet die eindeutige Nachrichten-ID und den Namen des Zielordners, um eine Nachricht in den Zielordner zu verschieben. Der folgende Code‑Snippet zeigt, wie Sie Nachrichten in einen anderen Postfachordner verschieben.

///<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 { }
    }
}

Nachrichten zwischen Ordnern kopieren

Die Aspose.Email API bietet die Möglichkeit, Nachrichten von einem Postfachordner zu einem anderen zu kopieren. Sie ermöglicht das Kopieren einzelner sowie mehrerer Nachrichten mithilfe der CopyMessage und CopyMessages Methoden. Die CopyMessages Methode bietet die Möglichkeit, mehrere Nachrichten vom Quellordner eines Postfachs in den Zielordner zu kopieren. Das folgende Codefragment zeigt, wie man Nachrichten in einen anderen Postfachordner kopiert.

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 { }
    }
}