کار با پیام‌ها از سرور

دریافت اطلاعات صندوق‌پست

می‌توانیم اطلاعاتی دربارهٔ صندوق‌پست مانند تعداد پیام‌ها و اندازهٔ صندوق‌پست را با استفاده از متدهای GetMailBoxSize() و GetMailBoxInfo() به دست آوریم.

  • متد GetMailBoxSize() اندازهٔ صندوق‌پست را بر حسب بایت برمی‌گرداند.
  • متد GetMailBoxInfo() یک شیء از نوع Pop3MailBoxInfo را برمی‌گرداند.

همچنین می‌توانید تعداد پیام‌ها را با استفاده از ویژگی MessageCount و اندازه را با استفاده از ویژگی OccupiedSize به دست آورید. کد نمونه زیر نشان می‌دهد چگونه اطلاعات صندوق‌پست را دریافت کنید. این نشان می‌دهد چگونه:

  1. ایجاد یک Pop3Client.
  2. اتصال به سرور POP3.
  3. دریافت اندازه صندوق‌پست.
  4. دریافت اطلاعات صندوق‌پست.
  5. دریافت تعداد پیام‌ها در صندوق‌پست.
  6. دریافت اندازه اشغال شده.

دریافت تعداد ایمیل‌ها در صندوق‌پست

قطعه کد زیر نشان می‌دهد چگونه تعداد پیام‌های ایمیل در یک صندوق‌پست را بشمارید.

Aspose.Email به توسعه‌دهندگان امکان کار با ایمیل‌ها را به روش‌های مختلف می‌دهد. برای مثال، می‌توانند اطلاعات سرآیند را قبل از تصمیم‌گیری برای دانلود ایمیل بازیابی کنند. یا می‌توانند ایمیل‌ها را از سرور دریافت کرده و بدون تجزیه آن‌ها ذخیره کنند (سریع‌تر) یا پس از تجزیه (کندتر). این مقاله نشان می‌دهد چگونه ایمیل‌ها را بازیابی و تبدیل کنیم.

دریافت اطلاعات سرآیندهای ایمیل

سرآیندهای ایمیل می‌توانند اطلاعاتی دربارهٔ پیام ایمیل به ما بدهند که می‌توانیم برای تصمیم‌گیری دربارهٔ دریافت کل پیام ایمیل استفاده کنیم. معمولاً اطلاعات سرآیند شامل فرستنده، موضوع، تاریخ دریافت و غیره است (سرآیندهای ایمیل به‌تفصیل در سفارشی‌سازی سرآیندهای ایمیل توضیح داده شده‌اند. آن موضوع به‌طور خاص دربارهٔ ارسال ایمیل با SMTP است، اما اطلاعات محتوای سرآیند ایمیل برای ایمیل‌های POP3 نیز معتبر است). مثال‌های زیر نشان می‌دهند چگونه سرآیندهای ایمیل را از یک سرور POP3 بر اساس شماره توالی پیام دریافت کنیم.

دریافت پیام‌های ایمیل

کامپوننت کلاس Aspose.Email.Pop3 امکان دریافت پیام‌های ایمیل از سرور POP3 و تجزیه آن‌ها به یک نمونه MailMessage را با کمک اجزای MailMessage فراهم می‌کند. کلاس MailMessage حاوی چندین ویژگی و متد برای دستکاری محتوای ایمیل است. با استفاده از تابع FetchMessage در کلاس Pop3Client، می‌توانید یک نمونه MailMessage را مستقیماً از سرور POP3 دریافت کنید. قطعه کد زیر نشان می‌دهد چگونه یک پیام ایمیل کامل را از سرور POP3 بازیابی کنید.

بازیابی اطلاعات خلاصهٔ پیام با استفاده از شناسهٔ یکتا

کلاینت POP3 API می‌تواند اطلاعات خلاصهٔ پیام را از سرور با استفاده از شناسه یکتای پیام دریافت کند. این امکان دسترسی سریع به اطلاعات کوتاه پیام را بدون نیاز به بازیابی کامل پیام از سرور فراهم می‌کند. قطعه کد زیر نشان می‌دهد چگونه اطلاعات خلاصهٔ پیام را دریافت کنید.

فهرست‌کردن پیام‌ها با چند‌اتصال

برای عملیات با بار سنگین Aspose.Email ویژگی ‘use_multi_connection’ را از Pop3Client کلاس برای استفاده از چندین اتصال هنگام دریافت ایمیل‌ها. با این حال، استفاده از این حالت لزوماً به بهبود عملکرد منجر نمی‌شود. قطعه کد زیر نشان می‌دهد چگونه به یک سرور POP3 متصل شوید، کلاینت را طوری تنظیم کنید که تا ۵ اتصال همزمان مجاز باشد و حالت چند‌اتصال را فعال کنید تا اطلاعات پیام‌های موجود در سرور را دریافت کنید:

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 است. قطعه کد زیر نشان می‌دهد چگونه پیامی را بر اساس شماره توالی آن ذخیره کنید، در این مثال شماره ۱. متد 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 برای استخراج اطلاعات فیلترشده از سرور استفاده می‌شود. این مقاله نشان می‌دهد چگونه پیام‌های ایمیل را از یک صندوق‌پست فیلتر کنیم. مثال اول نشان می‌دهد چگونه پیام‌ها را بر اساس تاریخ و موضوع فیلتر کنیم. همچنین نشان می‌دهیم چگونه بر مبنای معیارهای دیگر فیلتر کنیم و چگونه پرس‌وجوهای پیچیده‌تر بسازیم. همچنین کاربرد فیلتر تاریخ و زمان برای دریافت ایمیل‌های خاص از صندوق‌پست نشان داده می‌شود. علاوه بر این، نحوه اعمال فیلتر حساس به حروف کوچک و بزرگ نیز توضیح داده می‌شود.

فیلتر کردن پیام‌ها از صندوق‌پست

برای فیلتر کردن پیام‌ها از یک صندوق‌پست:

  1. اتصال و ورود به یک سرور POP3.
  2. یک نمونه از MailQuery ایجاد کنید و ویژگی‌های دلخواه را تنظیم کنید.
  3. متد 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)