جستجو و فیلتر ایمیل‌های IMAP در پایتون

برای بازیابی تمام پیام‌ها از یک صندوق ایمیل، Aspose.Email متد ’list_messages’ را فراهم می‌کند ImapClient کلاس. برای دریافت تنها پیام‌هایی که شرایط خاصی را برآورده می‌کنند، می‌توانید از متد بیش‌بارگذاری‌شده ’list_messages’ که یک MailQuery به‌عنوان آرگومان. این MailQuery کلاس ویژگی‌های مختلفی برای تعریف این شرایط ارائه می‌دهد، مانند تاریخ، موضوع، فرستنده و گیرنده.

نمونه کد اول نشان می‌دهد چگونه پیام‌ها را بر اساس تاریخ و موضوع هر دو فیلتر کنید. مثال‌های اضافی فیلتر بر اساس معیارهای دیگر و ساخت پرس‌و‌جوهای پیچیده‌تر را نمایش می‌دهند. علاوه بر این، API معیارهای جستجوی حساس به حروف بزرگ/کوچک را برای فیلتر دقیق پشتیبانی می‌کند و به شما اجازه می‌دهد هنگام فیلتر پیام‌ها از صندوق، انکودینگ رشته جستجو را مشخص کنید.

فیلتر و دریافت پیام‌ها از سرور IMAP

ساخت یک پرس‌و‌جوی ساده IMAP

از قطعه کد زیر برای اتصال به یک صندوق ایمیل IMAP و دریافت پیام‌هایی که امروز رسیده‌اند و کلمهٔ "newsletter" در موضوع دارند استفاده کنید.

  1. به سرور IMAP با استفاده از پورت ۹۹۳ و نام کاربری و رمز عبور متصل شوید.
  2. پوشهٔ "Inbox" را برای کار با ایمیل‌های ورودی انتخاب کنید.
  3. یک نمونه از ImapQueryBuilder برای ساخت یک پرس‌و‌جو جستجو.
  4. معیارهای جستجو را مشخص کنید، برای مثال که موضوع ایمیل‌ها شامل "Newsletter" باشد و تاریخ داخلی با تاریخ امروز مطابقت داشته باشد.
  5. پرس‌و‌جوی جستجو را با دریافت آن از سازنده تولید کنید.
  6. از پرس‌و‌جو برای فهرست کردن پیام‌هایی که معیارها را برآورده می‌کنند استفاده کنید.
  7. تعداد کل پیام‌هایی که با معیارهای جستجو مطابقت دارند را چاپ کنید.

ساخت معیارهای جستجوی پیچیده

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’ تنظیم کرد. 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 را برای دریافت ایمیل‌های هدفمند فراهم می‌کند.