Получение электронных писем с 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 на основе различных критериев, включая тему, внутреннюю дату, отправителя и получателя. Также показана чувствительная к регистру фильтрация и эффективное построение сложных запросов.
- Установите соединение с POP3‑сервером Gmail с помощью Pop3Client класс с указанными адресом сервера, портом, именем пользователя и паролем. Параметры безопасности установлены в AUTO для защищённого соединения.
- Создать экземпляр MailQueryBuilder для построения критериев поиска при фильтрации писем.
- Фильтрация по Теме:
- Письма, содержащие "Newsletter" в теме, указаны как условие фильтра.
- Фильтрация по Внутренней дате:
- Установлен фильтр для писем, полученных в текущую дату.
- Добавлен дополнительный фильтр для получения писем, полученных за последнюю неделю.
- Фильтрация по Отправителю:
- Применяются фильтры для поиска писем от конкретного адреса (saqib.razzaq@127.0.0.1) и включения писем из определённого домена (SpecificHost.com).
- Фильтрация по Получателю:
- Указан фильтр для поиска писем, отправленных конкретному получателю.
- Комбинировать запросы с использованием оператора OR для поиска писем, которые либо соответствуют заданной теме, либо отправлены с конкретного адреса.
- Чувствительная к регистру фильтрация:
- Указан чувствительный к регистру фильтр по теме, содержащей "Newsletter" (обозначено параметром True).
- Список сообщений:
- Метод list_messages() вызывается с построенным запросом для получения отфильтрованных сообщений из ящика.
- Наконец, выведите количество отфильтрованных сообщений.
Фильтрация писем по дате
Чтобы получить сообщения по дате доставки, используйте 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)