Робота з повідомленнями з сервера
Отримання інформації про скриньку
Ми можемо отримати інформацію про поштову скриньку, таку як кількість повідомлень та розмір скриньки, використовуючи методи GetMailBoxSize() і GetMailBoxInfo().
- Метод GetMailBoxSize() повертає розмір поштової скриньки в байтах.
- Метод GetMailBoxInfo() повертає об’єкт типу Pop3MailBoxInfo.
Також можна отримати кількість повідомлень за допомогою властивості MessageCount та розмір за допомогою властивості OccupiedSize. Нижче наведено зразковий код, який показує, як отримати інформацію про поштову скриньку. Він показує, як:
- Створіть Pop3Client.
- Підключитися до POP3 сервера.
- Отримати розмір скриньки.
- Отримати інформацію про скриньку.
- Отримати кількість повідомлень у скриньці.
- Отримати зайнятий розмір.
Отримання кількості листів у скринці
Наступний фрагмент коду показує, як підрахувати електронні листи в поштовій скриньці.
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 для витягання відфільтрованої інформації з сервера. У цій статті показано, як фільтрувати електронні листи у скринці. Перший приклад ілюструє фільтрацію повідомлень за датою та темою. Ми також демонструємо, як фільтрувати за іншими критеріями та як будувати більш складні запити. Показано застосування фільтра дати й часу для отримання конкретних листів зі скриньки. Крім того, показано, як застосовувати чутливе до регістру фільтрування.
Фільтрація повідомлень зі скриньки
Щоб фільтрувати повідомлення зі скриньки:
- Підключитися та ввійти на POP3 сервер.
- Створіть екземпляр MailQuery і встановіть потрібні властивості.
- Викличте метод 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
Наступний фрагмент коду показує, як поєднувати запити за допомогою 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)