ค้นหาและกรองอีเมล IMAP ใน Python

เพื่อดึงข้อความทั้งหมดจากกล่องเมล Aspose.Email มีเมธอด ’list_messages’ ของ ImapClient คลาส สำหรับดึงเฉพาะข้อความที่ตรงตามเงื่อนไขเฉพาะ คุณสามารถใช้เมธอด ’list_messages’ ที่โอเวอร์โหลดซึ่งรับ MailQuery เป็นอาร์กิวเมนต์. MailQuery คลาสมีคุณสมบัติหลายอย่างเพื่อกำหนดเงื่อนไขเหล่านี้ เช่น วันที่, หัวเรื่อง, ผู้ส่ง, และผู้รับ.

ตัวอย่างโค้ดแรกแสดงวิธีกรองข้อความตามทั้งวันที่และหัวเรื่อง ตัวอย่างเพิ่มเติมแสดงการกรองตามเกณฑ์อื่น ๆ และการสร้างคิวรีที่ซับซ้อนยิ่งขึ้น นอกจากนี้ API ยังรองรับเกณฑ์การค้นหาที่คำนึงถึงตัวพิมพ์ใหญ่/เล็กสำหรับการกรองที่แม่นยำและอนุญาตให้คุณระบุการเข้ารหัสของสตริงการค้นหาเมื่อต้องกรองข้อความจากกล่องเมล.

กรองและดึงข้อความจากเซิร์ฟเวอร์ IMAP

สร้างคิวรี IMAP แบบง่าย

ใช้ตัวอย่างโค้ดต่อไปนี้เพื่อเชื่อมต่อกับกล่องเมล IMAP และรับข้อความที่มาถึงวันนี้และมีคำว่า "newsletter" ในหัวเรื่อง.

  1. เชื่อมต่อกับเซิร์ฟเวอร์ IMAP โดยใช้พอร์ต 993 พร้อมกับชื่อผู้ใช้และรหัสผ่าน.
  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" และ "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 ขั้นสูงเพื่อดึงอีเมลที่ต้องการ.