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

Получение информации о ящике

Мы можем получить информацию о почтовом ящике, такую как количество сообщений и размер ящика, используя методы GetMailBoxSize() и GetMailBoxInfo().

  • Метод GetMailBoxSize() возвращает размер почтового ящика в байтах.
  • Метод GetMailBoxInfo() возвращает объект типа Pop3MailBoxInfo.

Также возможно получить количество сообщений с помощью свойства MessageCount и размер с помощью свойства OccupiedSize. Следующий пример кода показывает, как получить информацию о почтовом ящике. Он показывает, как:

  1. Создайте Pop3Client.
  2. Подключиться к серверу POP3.
  3. Получить размер ящика.
  4. Получить информацию о ящике.
  5. Получить количество сообщений в ящике.
  6. Получить занятый размер.

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

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

Aspose.Email позволяет разработчикам работать с электронными письмами различными способами. Например, они могут получить информацию о заголовках перед решением о загрузке письма. Либо они могут получить письма с сервера и сохранить их без разбора (быстрее) или после разбора (медленнее). В этой статье показано, как получать и конвертировать письма.

Получение информации о заголовках письма

Заголовки письма могут предоставить информацию о сообщении, которую можно использовать для решения, загружать ли всё письмо полностью. Обычно заголовки содержат отправителя, тему, дату получения и т.д. (Заголовки писем подробно описаны в разделе «Настройка заголовков электронной почты». Эта тема касается отправки писем через SMTP, однако информация о заголовках остаётся актуальной и для POP3‑писем). Следующие примеры показывают, как получить заголовки писем с POP3‑сервера по порядковому номеру сообщения.

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

Компонент класса Aspose.Email.Pop3 предоставляет возможность получать письма с POP3‑сервера и преобразовывать их в экземпляр MailMessage с помощью компонентов MailMessage. Класс MailMessage содержит несколько свойств и методов для работы с содержимым письма. С помощью функции FetchMessage класса Pop3Client можно получить экземпляр MailMessage непосредственно с POP3‑сервера. Следующий фрагмент кода показывает, как получить полное письмо с POP3‑сервера.

Получение краткой информации о сообщении с использованием уникального Id

POP3‑клиент API может получать сводную информацию о сообщении с сервера, используя уникальный идентификатор сообщения. Это обеспечивает быстрый доступ к краткой информации о сообщении без предварительного получения полного сообщения с сервера. Следующий фрагмент кода показывает, как получать сводную информацию о сообщении.

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

Для тяжёлых операций Aspose.Email предлагает свойство ‘use_multi_connection’ класса Pop3Client класс для использования нескольких соединений при получении писем. Однако использование этого режима не обязательно приводит к повышению производительности. Следующий фрагмент кода показывает, как установить соединение с POP3‑сервером, настроить клиент для допуска до 5 одновременных соединений и включить режим многопоточного соединения для получения информации о сообщениях, находящихся на сервере:

import aspose.email as ae

client = ae.clients.pop3.Pop3Client("host", 995, "username", "password", ae.clients.SecurityOptions.AUTO)

client.connections_quantity = 5
client.use_multi_connection = ae.clients.MultiConnectionMode.ENABLE
message_info_coll = client.list_messages()

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

Сохранить сообщение на диск без разбора

Если нужно скачать письма с POP3‑сервера без их разбора, используйте функцию SaveMessage класса Pop3Client. Функция SaveMessage не парсит сообщение, поэтому работает быстрее, чем функция FetchMessage. Следующий фрагмент кода показывает, как сохранять сообщение по его порядковому номеру, в данном случае номер 1. Метод SaveMessage сохраняет сообщение в оригинальном формате EML без разбора.

Разобрать сообщение перед сохранением

Используйте метод ‘fetch_message’ объекта клиента, созданного с помощью Pop3Client класс для получения сообщения с определённым порядковым номером. Приведённый ниже пример кода демонстрирует, как получить конкретное сообщение и сохранить его, используя тему как имя файла, вызвав метод ‘save’ у объекта msg:

import aspose.email as ae

client = ae.clients.pop3.Pop3Client("host", 995, "username", "password", ae.clients.SecurityOptions.AUTO)

# Fetch the message by its sequence number and Save the message using its subject as the file name
msg = client.fetch_message(1)
msg.save("first-message_out.eml", ae.SaveOptions.default_eml)

Фильтрация сообщений по отправителю, получателю или дате

Класс Pop3Client, описанный в разделе «Подключение к POP3‑серверу», предоставляет метод list_messages(), который получает все сообщения из почтового ящика. Чтобы получить только те сообщения, которые соответствуют определённому условию, используйте перегруженный метод ListMessages(), принимающий объект MailQuery в качестве аргумента. Класс MailQuery предоставляет различные свойства для указания условий запроса, например, дату, тему, отправителя, получателя и т.д. Класс MailQueryBuilder используется для построения поискового выражения. Сначала задаются все условия и ограничения, затем MailQuery заполняется запросом, сформированным MailQueryBuilder. Объект класса MailQuery используется Pop3Client для извлечения отфильтрованной информации с сервера. Эта статья показывает, как фильтровать сообщения электронной почты из ящика. Первый пример иллюстрирует фильтрацию сообщений по дате и теме. Мы также показываем, как фильтровать по другим критериям и как создавать более сложные запросы. Показано применение фильтра по дате и времени для получения конкретных писем из ящика. Кроме того, показано, как применять чувствительную к регистру фильтрацию.

Фильтрация сообщений из ящика

Чтобы отфильтровать сообщения из ящика:

  1. Подключитесь и выполните вход на POP3‑сервер.
  2. Создайте экземпляр MailQuery и задайте необходимые свойства.
  3. Вызовите метод Pop3Client.list_messages(MailQuery query) и передайте в параметрах объект MailQuery, чтобы получить только отфильтрованные сообщения.

Следующий фрагмент кода показывает, как подключиться к POP3‑ящику и получить сообщения, пришедшие сегодня и содержащие слово "newsletter" в теме.

Получение сообщений, соответствующих определённым критериям

Aspose.Email также позволяет создавать сложные критерии поиска для запросов и фильтрации писем. Для этой цели используйте MailQueryBuilder класс и его свойства. Критерии получения следующие:

  • Получить сообщения по дате доставки.
  • Получить сообщения в диапазоне.
  • Получить сообщения от конкретного отправителя.
  • Получить сообщения из конкретного домена.
  • Получить сообщения для конкретного получателя.

Текущая дата

Чтобы получить сообщения по дате доставки, используйте свойство ‘internal_date’, как показано в примере кода ниже:

import aspose.email as ae
from datetime import datetime

builder = ae.tools.search.MailQueryBuilder()
builder.internal_date.on(datetime.now())

Диапазон дат

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

import aspose.email as ae
from datetime import datetime, timedelta

builder = ae.tools.search.MailQueryBuilder()
# Emails that arrived in last 7 days
builder.internal_date.before(datetime.now())
builder.internal_date.since(datetime.today() - timedelta(days=7))

Конкретный отправитель

Чтобы получить сообщения от конкретного отправителя, используйте свойство ‘from_address’, как показано в примере кода ниже:

import aspose.email as ae

builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("saqib.razzaq@127.0.0.1")

Конкретный домен

Чтобы получить сообщения из определённого домена, используйте свойство ‘from_address’, как показано в примере кода ниже:

import aspose.email as ae

builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("SpecificHost.com")

Конкретный получатель

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

import aspose.email as ae

builder = ae.tools.search.MailQueryBuilder()
builder.to.contains("recipient")

Создание сложных запросов

Иногда необходимо удовлетворить более чем один запрос. Aspose.Email делает это возможным, комбинируя запросы в нескольких операторах. Создайте MailQueryBuilder объект и использовать его свойства для построения конкретных запросов.

Комбинирование запросов с AND

В следующем фрагменте кода показано, как комбинировать запросы с помощью И.

import aspose.email as ae
from datetime import datetime, timedelta

builder = ae.tools.search.MailQueryBuilder()
builder.internal_date.before(datetime.now())
builder.internal_date.since(datetime.today() - timedelta(days=7))
builder.from_address.contains("SpecificHost.com")

Комбинирование запросов с OR

Следующий фрагмент кода показывает, как комбинировать запросы с оператором OR.

import aspose.email as ae

builder = ae.tools.search.MailQueryBuilder()
builder.either(builder.subject.contains("test"), builder.from_address.contains("noreply@host.com"))

Применение чувствительных к регистру фильтров

API также предоставляет возможность фильтровать письма в ящике по чувствительным к регистру критериям. Следующие методы StringComparisonField класс предоставляет возможность искать письма с указанием флагов чувствительности к регистру.

Метод Aspose.Email.StringComparisonField.contains(value, ignore_case) Метод Aspose.Email.StringComparisonField.equals(value, ignore_case) Метод Aspose.Email.StringComparisonField.not_contains(value, ignore_case) Метод Aspose.Email.StringComparisonField.not_equals(value, ignore_case)

Следующий фрагмент кода показывает, как внедрить эту возможность в ваш проект:

import aspose.email as ae

builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("noreply@host.com", True)