การกรองอีเมล IMAP - วิธีการ, เกณฑ์ & ตัวอย่างโค้ด

การกรองข้อความพื้นฐาน

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

กรองข้อความจากกล่องจดหมาย

  1. เชื่อมต่อและเข้าสู่ระบบเซิร์ฟเวอร์ IMAP
  2. สร้างอินสแตนซ์ของ MailQuery และตั้งค่าคุณสมบัติ
  3. เรียกใช้ ImapClient.ListMessages(MailQuery query) เมธอดและส่งค่า MailQuery พร้อมพารามิเตอร์เพื่อดึงข้อความที่กรองเท่านั้น.

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

กรองข้อความตามเกณฑ์เฉพาะ

ตัวอย่างโค้ดด้านบน กรองข้อความตามหัวเรื่องอีเมลและวันที่ เราสามารถใช้คุณสมบัติเพิ่มเติมเพื่อกำหนดเงื่อนไขที่รองรับอื่น ๆ ด้านล่างเป็นตัวอย่างการตั้งค่าเงื่อนไขโดยใช้ MailQuery. ตัวอย่างโค้ดต่อไปนี้แสดงวิธีกรองอีเมลตาม:

  1. วันที่วันนี้.
  2. ช่วงวันที่.
  3. จากผู้ส่งเฉพาะ.
  4. จากโดเมนเฉพาะ.
  5. จากผู้รับเฉพาะ.

วันที่วันนี้

โค้ดตัวอย่างต่อไปนี้แสดงวิธีกรองอีเมลตามวันที่วันนี้.

ช่วงวันที่

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีกรองอีเมลตามช่วงวันที่

ผู้ส่งเฉพาะ

โค้ดตัวอย่างต่อไปนี้แสดงวิธีกรองอีเมลตามผู้ส่งเฉพาะ.

โดเมนเฉพาะ

โค้ดตัวอย่างต่อไปนี้แสดงวิธีกรองอีเมลตามโดเมนเฉพาะ.

ผู้รับเฉพาะ

โค้ดตัวอย่างต่อไปนี้แสดงวิธีกรองอีเมลตามผู้รับเฉพาะ.

การสร้างคิวรีขั้นสูง

หากแตกต่าง MailQueryBuilder คุณสมบัติตั้งค่าในคำสั่งแยกกัน จากนั้นเงื่อนไขทั้งหมดจะตรงกัน ตัวอย่างเช่น หากเราต้องการดึงข้อความระหว่างช่วงวันที่และจากโฮสต์เฉพาะ เราต้องเขียนสามคำสั่ง

รวมคิวรีด้วย AND

โค้ดสแนปต่อไปนี้แสดงวิธีรวมคิวรีด้วย AND

รวมคิวรีด้วย OR

MailQueryBuilder ให้ Or() เมธอดที่รับสอง MailQuery อินสแตนซ์เป็นพารามิเตอร์ มันดึงข้อความที่ตรงกับเงื่อนไขใดเงื่อนไขหนึ่งจากสองเงื่อนไขที่ระบุ โค้ดตัวอย่างต่อไปนี้แสดงวิธีกรองข้อความที่มีคำว่า “test” ในหัวเรื่องหรือผู้ส่งเป็น “noreply@host.com” โค้ดตัวอย่างต่อไปนี้แสดงวิธีรวมคำค้นด้วย OR.

การกรองตาม InternalDate

ข้อความสามารถดึงจากเซิร์ฟเวอร์โดยอิงจาก InternalDate อย่างไรก็ตามบางครั้งเซิร์ฟเวอร์อาจไม่ส่งคืนข้อความทั้งหมดตามที่เห็นในกล่องจดหมาย สาเหตุอาจมาจากโซนเวลาของเซิร์ฟเวอร์ที่อาจไม่เป็น UTC สำหรับเซิร์ฟเวอร์บางตัวเช่น Gmail. Aspose ส่งคำสั่งเช่น 008 SEARCH ON 4-May-2014 ตาม โปรโตคอล IMAP อย่างไรก็ตามผลลัพธ์อาจแตกต่างเนื่องจากการตั้งค่าโซนเวลาของเซิร์ฟเวอร์ มีสมาชิกใหม่ถูกเพิ่มใน ImapMessageInfo เป็น InternalDate ซึ่งช่วยเพิ่มเติมในการกรองข้อความ โค้ดตัวอย่างต่อไปนี้แสดงการใช้ InternalDate เพื่อกรองข้อความ.

การกรองแบบแยกแยะตัวพิมพ์

โค้ดตัวอย่างต่อไปนี้แสดงวิธีใช้การกรองอีเมลแบบแยกแยะตัวพิมพ์.

ระบุการเข้ารหัสสำหรับตัวสร้างคำค้นหา

API ของ ImapQueryBuilder คอนสตรัคเตอร์สามารถใช้ระบุการเข้ารหัสสำหรับสตริงการค้นหาได้ สิ่งนี้ยังสามารถตั้งค่าโดยใช้ DefaultEncoding คุณสมบัติของ MailQueryBuilder โค้ดตัวอย่างต่อไปนี้แสดงวิธีระบุการเข้ารหัสสำหรับตัวสร้างคำค้นหา.

ตัวเลือกการกรองแบบกำหนดเอง

กรองข้อความด้วยแฟล็กที่กำหนดเอง

การค้นหาแบบกำหนดเองสำหรับการกรอง

ตัวอย่างเช่น มาตรฐาน RFC 3501 ไม่อนุญาตให้ค้นหาข้อความโดยอิงจากการมีไฟล์แนบในข้อความ แต่ Gmail มีให้ ส่วนขยาย IMAP ซึ่งทำให้สามารถทำการค้นหาเช่นนี้ได้ ตัวอย่างโค้ดต่อไปนี้แสดงวิธีสร้างคิวรีที่สอดคล้องกัน

ImapQueryBuilder queryBuilder = new ImapQueryBuilder();
queryBuilder.CustomSearch("X-GM-RAW \"has:attachment\"");

MailQuery mailQuery = queryBuilder.GetQuery();
ImapMessageInfoCollection messageInfoCollection = imapClient.ListMessages(mailQuery);

กรองข้อความด้วยการสนับสนุนการแบ่งหน้า

นี้ ImapClient ให้ความสามารถในการค้นหาข้อความจากกล่องจดหมายและแสดงรายการพร้อมการสนับสนุนการแบ่งหน้า โค้ดตัวอย่างต่อไปนี้แสดงวิธีการกรองข้อความด้วยการแบ่งหน้า.