Пошук та фільтрація IMAP листів у Python
Щоб отримати всі повідомлення зі скриньки, Aspose.Email надає метод ’list_messages’ класу ImapClient клас. Для отримання лише тих повідомлень, які задовольняють певні умови, можна використати перевантажений метод ’list_messages’, що приймає MailQuery як аргумент. MailQuery клас пропонує різні властивості для визначення цих умов, такі як дата, тема, відправник та одержувач.
Перший приклад коду демонструє, як фільтрувати повідомлення за датою та темою. Додаткові приклади показують фільтрацію за іншими критеріями та складання більш складних запитів. Крім того, API підтримує чутливі до регістру критерії пошуку для точного фільтрування і дозволяє вказати кодування рядка пошуку під час фільтрації листів у скриньці.
Фільтруйте та отримуйте повідомлення з IMAP сервера
Створіть простий IMAP запит
Використайте наступний фрагмент коду для підключення до IMAP скриньки та отримання листів, що прийшли сьогодні і мають слово "newsletter" у темі.
- Підключіться до IMAP сервера, використовуючи порт 993, ім’я користувача та пароль.
- Виберіть папку "Inbox" для роботи з вхідними листами.
- Створіть екземпляр ImapQueryBuilder для складання запиту пошуку.
- Вкажіть критерії пошуку, наприклад, щоб тема листа містила "Newsletter" та внутрішня дата відповідала сьогоднішній даті.
- Створіть запит пошуку, отримавши його з будівельника.
- Використайте запит для перерахування повідомлень, що відповідають критеріям.
- Виведіть загальну кількість повідомлень, що відповідають критеріям пошуку.
Створити складні критерії пошуку
Aspose.Email також дозволяє створювати складні критерії пошуку для запиту та фільтрації електронних листів, таких як дата доставки, в межах діапазону, конкретний відправник, певний домен або конкретний отримувач. Для цього використовуйте MailQueryBuilder класу та його властивостей. Нижче наведені приклади коду, які покажуть, як отримувати повідомлення за певними критеріями.
Фільтрувати електронні листи за сьогоднішньою датою
Щоб отримати повідомлення за датою доставки, використовуйте властивість ‘internal_date’ MailQueryBuilder клас, як показано у наведеному нижче прикладі коду:
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’ класу MailQueryBuilder клас, як показано у наведеному нижче прикладі коду:
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")
Фільтрувати повідомлення за внутрішньою датою
Складіть запит за зазначеними умовами, такими як "internal date" та "subject contains". "Internal date" — це дата і час, коли лист був отриманий або доданий до поштового сервера, і може бути встановлена за допомогою властивості ‘internal_date’ класу ImapQueryBuilder клас. Нижче наведений приклад коду демонструє, як отримати конкретні листи з вхідних, використовуючи критерії теми та дати:
import aspose.email as ae
from datetime import datetime
client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd")
client.select_folder("Inbox")
# Set conditions, Subject contains "Newsletter", Emails that arrived today
builder = ae.clients.imap.ImapQueryBuilder()
builder.subject.contains("Newsletter")
builder.internal_date.on(datetime.now())
# Build the query and Get list of messages
query = builder.get_query()
messages = client.list_messages(query)
for info in messages:
print(f"Internal Date: {info.internal_date}")
Фільтрувати повідомлення за користувацькими ключовими словами‑прапорцями
Створіть запит для пошуку в IMAP скриньці листів, що містять користувацькі ключові слова‑прапорці, зокрема "custom1" і "custom2". Для складання запиту використайте ImapQueryBuilder клас, що фільтрує листи під час їх отримання з IMAP сервера.
Для початку створіть екземпляр будівельника запитів. Використовуючи has_flags метод, додайте умови, щоб включити лише ті листи, які мають зазначені IMAP ключові слова‑прапорці. Користувацькі ключові слова в IMAP, також називані визначеними користувачем прапорцями, дозволяють тегувати або категоризувати листи для різних цілей, наприклад, позначення їх статусу.
Нижче наведений код ілюструє, як створити запит для отримання листів на основі користувацьких ключових слів‑прапорців:
builder = ae.clients.imap.ImapQueryBuilder()
builder.has_flags(ae.clients.imap.ImapMessageFlags.keyword("custom1"))
builder.has_flags(ae.clients.imap.ImapMessageFlags.keyword("custom2"))
Створення складних запитів
Іноді необхідно задовольнити більше ніж один запит. 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.
builder.either(builder.subject.contains("test"), builder.from_address.contains("noreply@host.com"))
Застосування чутливих до регістру фільтрів
API також забезпечує можливість фільтрування листів у скринці за чутливим до регістру критерієм. Наступні методи StringComparisonField клас забезпечує можливість пошуку листів з вказанням прапорців чутливості до регістру.
- StringComparisonField.contains(value, ignore_case)
- StringComparisonField.equals(value, ignore_case)
- StringComparisonField.not_contains(value, ignore_case)
- StringComparisonField.not_equals(value, ignore_case)
Нижче наведено фрагмент коду, який показує, як впровадити цю можливість у ваш проект:
builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("noreply@host.com", True)
Виконувати користувацькі запити пошуку
Створіть запит пошуку для IMAP скриньки, який фільтрує листи за користувацьким Gmail критерієм — зокрема листи, що мають вкладення.
Почніть зі створення екземпляру ImapQueryBuilder, що допомагає створювати складні IMAP запити пошуку. Використовуйте custom_search метод для додавання Gmail‑специфічного рядка пошуку до будівельника запитів.
Рядок пошуку X-GM-RAW "has:attachment" використовує розширений атрибут IMAP Gmail X-GM-RAW, дозволяючи застосовувати потужний веб-пошук Gmail у запитах IMAP. Оператор has:attachment повертає всі листи, що містять вкладення.
Нижче наведений код демонструє, як відфільтрувати листи, щоб отримати всі повідомлення з вкладеннями:
builder = ae.clients.imap.ImapQueryBuilder()
builder.custom_search("X-GM-RAW \"has:attachment\"")
mailQuery = builder.get_query()
Цей метод дозволяє розширене фільтрування, специфічне для Gmail, для отримання цільових листів.