Получение и список электронных писем с IMAP‑сервера

Получение и перечисление сообщений

Как получить идентификационную информацию о сообщениях в почтовом ящике

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

Aspose.Email.ImapMessageInfo класс: представляет идентификационную информацию о сообщении в IMAP‑почтовом ящике.

ImapMessageInfo.SequenceNumber свойство: получает порядковый номер сообщения.

ImapMessageInfo.UniqueId свойство: получает уникальный идентификатор сообщения.

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

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

  1. Создать экземпляр ImapClient класс, предоставляя необходимые параметры, такие как хост IMAP‑сервера, порт, адрес электронной почты, пароль и параметры безопасности.
  2. Используйте ListMessages метод для получения списка сообщений из папки "INBOX". Ограничьте список первыми пятью сообщениями, используя метод Take(5).
  3. Извлеките порядковые номера перечисленных сообщений, используя SequenceNumber свойство каждого сообщения.
  4. Используйте FetchMessages метод для получения полных деталей сообщений с сервера, используя порядковые номера, полученные на предыдущем шаге.
  5. Пройдитесь по полученным сообщениям и для каждого сообщения получите и отобразите следующую информацию:
  • Порядковый номер сообщения.
  • Свойство ItemId.SequenceNumber.
  • Тема сообщения.
using (var client = new ImapClient(imapHost, port, emailAddress, password, securityOption))
{
    // List the first 5 messages from the inbox
    var msgs = client.ListMessages("INBOX").Take(5);
    
    // Get sequence numbers of the messages
    var seqIds = msgs.Select(t => t.SequenceNumber);
    
    // Fetch messages based on sequence numbers
    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. Ниже показан фрагмент кода, демонстрирующий использование режима множественных соединений для перечисления сообщений и сравнивающий его производительность с режимом одиночного соединения.

Список сообщений с поддержкой постраничного вывода

В сценариях, когда почтовый сервер содержит большое количество сообщений в почтовом ящике, часто требуется перечислять или получать сообщения с поддержкой постраничного вывода. 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.
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‑сервера и сохранять их в формате EML на локальный диск. Для сохранения сообщений на диск требуется выполнить следующие шаги:

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

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

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

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

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

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

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

Группировать полученные сообщения

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

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

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

Обработка специальной информации о сообщении

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

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

Заголовок List-Unsubscribe содержит URL для отписки от почтовых рассылок, например рекламных, новостных и т.д. Чтобы получить заголовок List-Unsubscribe, используйте ListUnsubscribe свойство ImapMessageInfo класс. В следующем примере показано использование ListUnsubscribe свойство для получения заголовка List-Unsubscribe.