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

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

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

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

    • 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 MessageID.

Список сообщений с сервера

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

Рекурсивный список сообщений с сервера

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

Список сообщений с помощью MultiConnection

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

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

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

Следующий пример кода демонстрирует использование AscendingSorting собственность PageSettings класс для изменения порядка писем.

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

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

  1. Создайте экземпляр ImapClient class.
  2. Укажите имя хоста, порт, имя пользователя и пароль в iMapClient constructor.
  3. Выберите папку, используя SelectFolder() method.
  4. Позвоните ListMessages метод получения ImapMessageInfoCollection object.
  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 class.
  • Вложения aspose.email.clients.imap.List (целочисленный порядковый номер) - Получает информацию о каждом вложении в сообщении.

Пример кода со следующими шагами покажет вам, как использовать 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 содержит URL-адрес для отказа от подписки на списки рассылки, например на рекламные объявления, информационные бюллетени и т. д. Чтобы получить заголовок List-Unsubscribe, используйте ListUnsubscribe собственность ImapMessageInfo класс. В следующем примере показано использование ListUnsubscribe свойство для получения заголовка List-Unsubscribe.