Работа с сообщениями с IMAP-сервера

Получение идентификационной информации для сообщений, полученных из почтового ящика

При извлечении и обработке электронных писем вы можете получить детали этих сообщений, используя их последовательные номера. Для взаимодействия с IMAP-почтовым ящиком используются следующие функции:

  • Aspose.Email.MailboxInfo класс - Представляет идентификационную информацию о сообщении в почтовом ящике.

    • Aspose.Email.MailboxInfo.SequenceNumber свойство - Последовательный номер сообщения.

    • Aspose.Email.MailboxInfo.UniqueId свойство - Уникальный идентификатор сообщения.

  • Aspose.Email.MailMessage.ItemId свойство - Представляет идентификационную информацию о сообщении в почтовом ящике.

Приведенный ниже фрагмент кода показывает, как получить идентификационную информацию о сообщениях:

using (var client = new ImapClient(imapHost, port, emailAddress, password, securityOption))
{
    var msgs = client.ListMessages("INBOX").Take(5);
    var seqIds = msgs.Select(t => t.SequenceNumber);
    var msgsViaFetch = client.FetchMessages(seqIds);
	
    for (var i = 0; i < 5; i++)
    {
        var thisMsg = msgsViaFetch[i];
        Console.WriteLine($"Message ID:{seqIds.ElementAt(i)} SequenceNumber: {thisMsg.ItemId.SequenceNumber} Subject:{thisMsg.Subject}");
    }
}

Перечисление идентификаторов MIME-сообщений с сервера

ImapMessageInfo предоставляет MIME MessageId для идентификации сообщения без извлечения полного сообщения. Приведенный ниже фрагмент кода показывает, как перечислить идентификаторы MIME-сообщений.

Перечисление сообщений с сервера

Aspose.Email предоставляет перегруженный вариант ListMessages() с 2 членами, чтобы извлечь определенное количество сообщений на основе запроса. Приведенный ниже фрагмент кода показывает, как перечислить сообщения.

Перечисление сообщений с сервера рекурсивно

Протокол IMAP поддерживает рекурсивное перечисление сообщений из папки почтового ящика. Это также помогает перечислять сообщения из подпапок папки. Приведенный ниже фрагмент кода показывает, как рекурсивно перечислять сообщения.

Перечисление сообщений с использованием многосоединений

ImapClient предоставляет свойство UseMultiConnection, которое можно использовать для создания нескольких соединений для тяжелых операций. Вы также можете установить количество соединений, которые будут использоваться в режиме многосоединения, используя ImapClient.ConnectionsQuantity. Приведенный ниже фрагмент кода демонстрирует использование режима многосоединения для перечисления сообщений и сравнивает его производительность с режимом одного соединения.

Получение сообщений в порядке убывания

Aspose.Email предоставляет метод ImapClient.ListMessagesByPage, который перечисляет сообщения с поддержкой постраничной навигации. Некоторые перегрузки ImapClient.ListMessagesByPage принимают PageSettings как параметр. PageSettings предоставляет свойство AscendingSorting, которое, когда установлено в false, возвращает электронные письма в порядке убывания.

Пример кода ниже демонстрирует использование AscendingSorting свойства класса PageSettings для изменения порядка электронных писем.

Извлечение сообщений с сервера и сохранение на диск

Класс ImapClient может извлекать сообщения с IMAP-сервера и сохранять сообщения в формате EML на локальном диске. Для сохранения сообщений на диск необходимо выполнить следующие шаги:

  1. Создайте экземпляр класса ImapClient.
  2. Укажите имя хоста, порт, имя пользователя и пароль в конструкторе ImapClient.
  3. Выберите папку, используя метод SelectFolder().
  4. Вызовите метод ListMessages, чтобы получить объект ImapMessageInfoCollection.
  5. Переберите коллекцию ImapMessageInfoCollection, вызовите метод SaveMessage() и укажите выходной путь и имя файла.

Приведенный ниже фрагмент кода показывает, как извлекать электронные письма с сервера и сохранять их.

Сохранение сообщений в формате MSG

В приведенном выше примере электронные письма сохраняются в формате EML. Чтобы сохранить электронные письма в формате MSG, необходимо вызвать метод ImapClient.FetchMessage(). Он возвращает сообщение в экземпляре класса MailMessage. Затем можно вызвать метод MailMessage.Save(), чтобы сохранить сообщение в формате MSG. Приведенный ниже фрагмент кода показывает, как сохранять сообщения в формате MSG.

Групповое извлечение сообщений

ImapClient предоставляет метод FetchMessages, который принимает итерируемый набор последовательных номеров или уникальных идентификаторов и возвращает список MailMessage. Приведенный ниже фрагмент кода демонстрирует использование метода FetchMessages для извлечения сообщений по последовательным номерам и уникальным идентификаторам.

Перечисление сообщений с поддержкой постраничной навигации

В ситуациях, когда почтовый сервер содержит большое количество сообщений в почтовом ящике, часто возникает желание перечислять или извлекать сообщения с поддержкой постраничной навигации. API Aspose.Email ImapClient позволяет извлекать сообщения с сервера с поддержкой постраничной навигации.

Перечисление вложений сообщений

Чтобы получить информацию о вложениях, таких как имя, размер, не извлекая данные вложения, попробуйте следующие API:

  • Aspose.Email.Clients.Imap.ImapAttachmentInfo - Представляет информацию о вложении.
  • Aspose.Email.Clients.Imap.ImapAttachmentInfoCollection - Представляет коллекцию класса ImapAttachmentInfo.
  • Aspose.Email.Clients.Imap.ListAttachments(int sequenceNumber) - Получает информацию для каждого вложения в сообщении.

Пример кода с шагами ниже покажет, как использовать эти API:

  1. Вызовите метод ListMessages() на объекте imapClient. Этот метод вернет ImapMessageInfoCollection с информацией о сообщениях в почтовом ящике.

  2. Переберите каждое сообщение в messageInfoCollection, используя цикл foreach.

  3. Вызовите метод ListAttachments() на объекте imapClient, передавая свойство SequenceNumber объекта сообщения в качестве параметра. Этот метод вернет ImapAttachmentInfoCollection с информацией о вложениях в сообщении.

  4. Переберите каждое вложение в attachmentInfoCollection, используя цикл foreach.

  5. Внутри внешнего цикла вы можете получить доступ к информации о каждом вложении, используя свойства объекта attachmentInfo. В этом примере имя и размер каждого вложения выводятся в консоль с помощью Console.WriteLine().

    Console.WriteLine("Attachment: {0} (size: {1})", attachmentInfo.Name, attachmentInfo.Size);

var messageInfoCollection = imapClient.ListMessages();
    
foreach (var message in messageInfoCollection)
{
    var attachmentInfoCollection = imapClient.ListAttachments(message.SequenceNumber);

    foreach (var attachmentInfo in attachmentInfoCollection)
    {
        Console.WriteLine("Attachment: {0} (size: {1})", attachmentInfo.Name, attachmentInfo.Size);
    }
}

Получение папок и чтение сообщений рекурсивно

В этой статье используются большинство функций ImapClient для создания приложения, которое рекурсивно перечисляет все папки и подпапки с IMAP-сервера. Оно также сохраняет сообщения в каждой папке и подпапке в формате MSG на локальном диске. На диске папки и сообщения создаются и сохраняются в той же иерархической структуре, что и на IMAP-сервере. Приведенный ниже фрагмент кода показывает, как получить информацию о сообщениях и подпапках рекурсивно.

Извлечение дополнительных параметров в качестве сводной информации

Получение информации заголовка List-Unsubscribe

Заголовок List-Unsubscribe содержит URL-адрес для отписки от списков рассылки, например, рекламных, информационных и т. д. Для получения заголовка List-Unsubscribe используйте свойство ListUnsubscribe класса ImapMessageInfo. Приведенный ниже пример показывает использование свойства ListUnsubscribe для получения заголовка List-Unsubscribe.