Управление, перемещение и организация папок IMAP

Операции с папками

Получить информацию о папке

Получать информацию о папках с IMAP‑сервера очень просто с Aspose.Email. Вызовите ListFolders() метод ImapClient класс. Возвращает объект ImapFolderInfoCollection тип. Итерируйте эту коллекцию и получайте информацию о каждой папке в цикле. Метод перегружен. Вы можете передать имя папки в качестве параметра, чтобы получить список подпапок. Приведённый ниже фрагмент кода показывает, как получить информацию о папках с IMAP‑сервера, используя Aspose.Email и описанный метод.

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

Удаление и переименование папок

Папку на IMAP‑сервере можно удалить или переименовать одной строкой кода с помощью Aspose.Email:

  • Этот DeleteFolder() метод принимает имя папки в качестве параметра.
  • Для RenameFolder() метод, вам необходимо передать имя текущей папки и новое имя папки. Ниже показан фрагмент кода, демонстрирующий, как удалить папку с IMAP‑сервера и как переименовать папку. Каждая операция выполняется одной строкой кода.
// Delete a folder and Rename a folder
client.DeleteFolder("foldername");
client.RenameFolder("foldername", "newfoldername");

Работа со специальными почтовыми папками

Некоторые хранилища сообщений IMAP включают специальные ящики, такие как черновики или отправленные сообщения. Многие почтовые клиенты позволяют пользователям указывать, куда помещать черновики или отправленные сообщения, но их настройка требует знания, какие ящики сервер выделил для этих целей. Aspose.Email может определить эти специальные ящики, используя ImapMailboxInfo класс, упрощающий работу с ними. Ниже приведён пример кода, демонстрирующий, как получить доступ к этим специализированным почтовым ящикам, используя ImapMailboxInfo класс.

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

Операции с сообщениями в папках

Добавить новое сообщение в папку

Вы можете добавить новое сообщение в папку, используя MailMessage и ImapClient классы. Сначала создайте MailMessage объект, предоставив значения темы, получателя и отправителя. Затем подпишитесь на папку и добавьте в неё сообщение. Приведённый ниже фрагмент кода показывает, как добавить новое сообщение в папку.

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

Добавить несколько сообщений с MultiConnection

Вы можете добавить несколько сообщений, используя AppendMessages метод, предоставляемый ImapClient классы.  AppendMessages метод принимает список MailMessage и добавляет её в текущую папку, если папка не указана как параметр. ImapClient также поддерживает режим MultiConnection для сильно нагруженных операций. Ниже показан фрагмент кода, демонстрирующий, как добавить несколько сообщений, используя режим 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);

Перемещение сообщений между папками

Aspose.Email для .NET позволяет перемещать сообщения из одной папки почтового ящика в другую, используя ImapClient API. The MoveMessage Метод использует уникальный идентификатор сообщения и имя папки назначения для перемещения сообщения в целевую папку. Ниже приведён фрагмент кода, показывающий, как переместить сообщения в другую папку почтового ящика.

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

Копировать сообщения между папками

API Aspose.Email предоставляет возможность копировать сообщения из одной папки почтового ящика в другую. Он позволяет копировать как отдельные, так и несколько сообщений, используя CopyMessage и CopyMessages методы. CopyMessages метод предоставляет возможность копировать несколько сообщений из исходной папки почтового ящика в целевую папку. Ниже показан фрагмент кода, демонстрирующий, как копировать сообщения в другую папку почтового ящика.

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