ค้นหาและกรองอีเมล IMAP ใน Python
เพื่อดึงข้อความทั้งหมดจากกล่องเมล Aspose.Email มีเมธอด ’list_messages’ ของ ImapClient คลาส สำหรับดึงเฉพาะข้อความที่ตรงตามเงื่อนไขเฉพาะ คุณสามารถใช้เมธอด ’list_messages’ ที่โอเวอร์โหลดซึ่งรับ MailQuery เป็นอาร์กิวเมนต์. MailQuery คลาสมีคุณสมบัติหลายอย่างเพื่อกำหนดเงื่อนไขเหล่านี้ เช่น วันที่, หัวเรื่อง, ผู้ส่ง, และผู้รับ.
ตัวอย่างโค้ดแรกแสดงวิธีกรองข้อความตามทั้งวันที่และหัวเรื่อง ตัวอย่างเพิ่มเติมแสดงการกรองตามเกณฑ์อื่น ๆ และการสร้างคิวรีที่ซับซ้อนยิ่งขึ้น นอกจากนี้ API ยังรองรับเกณฑ์การค้นหาที่คำนึงถึงตัวพิมพ์ใหญ่/เล็กสำหรับการกรองที่แม่นยำและอนุญาตให้คุณระบุการเข้ารหัสของสตริงการค้นหาเมื่อต้องกรองข้อความจากกล่องเมล.
กรองและดึงข้อความจากเซิร์ฟเวอร์ IMAP
สร้างคิวรี IMAP แบบง่าย
ใช้ตัวอย่างโค้ดต่อไปนี้เพื่อเชื่อมต่อกับกล่องเมล IMAP และรับข้อความที่มาถึงวันนี้และมีคำว่า "newsletter" ในหัวเรื่อง.
- เชื่อมต่อกับเซิร์ฟเวอร์ IMAP โดยใช้พอร์ต 993 พร้อมกับชื่อผู้ใช้และรหัสผ่าน.
- เลือกโฟลเดอร์ "Inbox" เพื่อทำงานกับอีเมลที่เข้ามา.
- สร้างอินสแตนซ์ของ ImapQueryBuilder เพื่อสร้างคิวรีการค้นหา.
- ระบุเกณฑ์การค้นหา ตัวอย่างเช่น หัวข้อของอีเมลควรมีคำว่า "Newsletter" และวันที่ภายในควรตรงกับวันที่วันนี้.
- สร้างคิวรีการค้นหาโดยดึงจากตัวสร้าง.
- ใช้คิวรีเพื่อแสดงรายการข้อความที่ตรงตามเกณฑ์.
- พิมพ์จำนวนรวมของข้อความที่ตรงกับเกณฑ์การค้นหา.
สร้างเกณฑ์การค้นหาที่ซับซ้อน
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 ขั้นสูงเพื่อดึงอีเมลที่ต้องการ.