Работа със съобщения от сървъра
Получаване на информация за пощенската кутия
Можем да получим информация за пощенската кутия, като броя на съобщенията и размера й, използвайки методите GetMailBoxSize() и GetMailBoxInfo().
- Методът GetMailBoxSize() връща размера на пощенската кутия в байтове.
- Методът GetMailBoxInfo() връща обект от тип Pop3MailBoxInfo.
Също така е възможно да се получи броят на съобщенията, използвайки свойството MessageCount, и размерът, използвайки свойството OccupiedSize. Следният примерен код показва как да се получи информация за пощенската кутия. Той показва как да:
- Създайте Pop3Client.
- Свържете се към POP3 сървър.
- Получете размера на пощенската кутия.
- Получете информация за пощенската кутия.
- Получете броя на съобщенията в пощенската кутия.
- Получете заетия размер.
Получаване на брой имейли в кутията
Следният кодов откъс показва как да броите имейл съобщенията в пощенска кутия.
Aspose.Email позволява на разработчиците да работят с имейли по много различни начини. Например, те могат да извлекат информация за заглавните части преди да решат дали да изтеглят имейл. Или могат да извлекат имейли от сървър и да ги запазят без парсиране (по-бързо) или след парсиране (по-бавно). Тази статия показва как да извличате и конвертирате имейли.
Извличане на информация за имейл заглавия
Заглавните части (headers) на имейл могат да ни дадат информация за имейл съобщението, която можем да използваме, за да решим дали да извлечем цялото съобщение или не. Обичайно, информацията в заглавните части включва подател, тема, дата на получаване и т.н. (Заглавните части на имейл са подробно описани в „Персонализиране на заглавните части на имейл“. Тази тема се отнася конкретно за изпращане на имейл чрез SMTP, но информацията за съдържанието на заглавните части е валидна и за POP3 имейли). Следните примери показват как да се извлекат заглавните части от POP3 сървър, използвайки последователния номер на съобщението.
Извличане на имейл съобщения
Компонентът Aspose.Email.Pop3 клас предоставя възможност за извличане на имейл съобщения от POP3 сървър и тяхното парсиране в MailMessage инстанция с помощта на компоненти от MailMessage. Класът MailMessage съдържа множество свойства и методи за манипулиране на съдържанието на имейл. Чрез използване на функцията FetchMessage от класа Pop3Client, можете да получите MailMessage инстанция директно от POP3 сървъра. Следният кодов фрагмент показва как да се извлече пълно имейл съобщение от POP3 сървъра.
Извличане на кратка информация за съобщение, използвайки уникално ID
POP3 клиентът на API‑то може да извлече обобщена информация за съобщението от сървъра, използвайки уникалния ID на съобщението. Това осигурява бърз достъп до кратка информация за съобщението, без първо да се изтегля цялото съобщение от сървъра. Следният кодов фрагмент показва как да се извлече обобщена информация за съобщението.
Изброяване на съобщения с 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)