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

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

Чтобы загрузить письма с POP3‑сервера без разбора, вы можете использовать save_message метод Aspose.Email Pop3Client класс. Следующий фрагмент кода иллюстрирует, как сохранить сообщение, используя его порядковый номер, в данном случае номер 1. save_message метод сохраняет оригинальный формат 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)

Фильтрация писем с сервера по критериям

Aspose.Email Pop3Client class предоставляет list_messages() метод, который получает все сообщения из ящика. Чтобы получить только сообщения, соответствующие некоторому условию, используйте перегруженный list_messages(query) метод, который принимает MailQuery в качестве аргумента. The MailQuery класс предоставляет различные свойства для указания условий запроса, например, дату, тему, отправителя, получателя и т.д.

Для построения поискового выражения используйте MailQueryBuilder класс. Сначала определите все необходимые условия и ограничения, затем заполните объект MailQuery запросом, созданным MailQueryBuilder. Pop3Client использует этот объект MailQuery для получения отфильтрованной информации с сервера.

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

  1. Установите соединение с POP3‑сервером Gmail с помощью Pop3Client класс с указанными адресом сервера, портом, именем пользователя и паролем. Параметры безопасности установлены в AUTO для защищённого соединения.
  2. Создать экземпляр MailQueryBuilder для построения критериев поиска при фильтрации писем.
  3. Фильтрация по Теме:
    • Письма, содержащие "Newsletter" в теме, указаны как условие фильтра.
  4. Фильтрация по Внутренней дате:
    • Установлен фильтр для писем, полученных в текущую дату.
    • Добавлен дополнительный фильтр для получения писем, полученных за последнюю неделю.
  5. Фильтрация по Отправителю:
    • Применяются фильтры для поиска писем от конкретного адреса (saqib.razzaq@127.0.0.1) и включения писем из определённого домена (SpecificHost.com).
  6. Фильтрация по Получателю:
    • Указан фильтр для поиска писем, отправленных конкретному получателю.
  7. Комбинировать запросы с использованием оператора OR для поиска писем, которые либо соответствуют заданной теме, либо отправлены с конкретного адреса.
  8. Чувствительная к регистру фильтрация:
    • Указан чувствительный к регистру фильтр по теме, содержащей "Newsletter" (обозначено параметром True).
  9. Список сообщений:
    • Метод list_messages() вызывается с построенным запросом для получения отфильтрованных сообщений из ящика.
  10. Наконец, выведите количество отфильтрованных сообщений.

Фильтрация писем по дате

Чтобы получить сообщения по дате доставки, используйте 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

Следующий фрагмент кода показывает, как комбинировать запросы с оператором 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)