การกรองอีเมล IMAP - วิธีการ, เกณฑ์ & ตัวอย่างโค้ด
การกรองข้อความพื้นฐาน
นี้ ImapClient class ให้ ListMessages() เมธอดที่ดึงข้อความทั้งหมดจากกล่องจดหมาย เพื่อดึงเฉพาะข้อความที่ตรงกับเงื่อนไขบางอย่าง ให้ใช้เมธอดโอเวอร์โหลด ListMessages() เมธอดที่รับ MailQuery เป็นอาร์กิวเมนต์. MailQuery คลาสให้คุณสมบัติต่างๆ สำหรับระบุเงื่อนไข เช่น วันที่, หัวเรื่อง, ผู้ส่ง, ผู้รับ เป็นต้น ตัวอย่างแรกแสดงวิธีกรองข้อความตามวันที่และหัวเรื่อง เรายังแสดงวิธีกรองตามเกณฑ์อื่นและวิธีสร้างคำค้นที่ซับซ้อนมากขึ้น API ยังให้ความสามารถในการใช้เกณฑ์การค้นหาแบบแยกแยะตัวพิมพ์เพื่อให้ตรงกับเงื่อนไขการกรองอย่างแม่นยำ API ยังอนุญาตให้ระบุการเข้ารหัสของสตริงการค้นหาเพื่อกรองข้อความจากกล่องจดหมาย
กรองข้อความจากกล่องจดหมาย
- เชื่อมต่อและเข้าสู่ระบบเซิร์ฟเวอร์ IMAP
- สร้างอินสแตนซ์ของ MailQuery และตั้งค่าคุณสมบัติ
- เรียกใช้ ImapClient.ListMessages(MailQuery query) เมธอดและส่งค่า MailQuery พร้อมพารามิเตอร์เพื่อดึงข้อความที่กรองเท่านั้น.
โค้ดตัวอย่างต่อไปนี้แสดงวิธีเชื่อมต่อกับกล่องจดหมาย IMAP และดึงข้อความที่มาถึงวันนี้และมีคำว่า "newsletter" ในหัวเรื่อง
กรองข้อความตามเกณฑ์เฉพาะ
ตัวอย่างโค้ดด้านบน กรองข้อความตามหัวเรื่องอีเมลและวันที่ เราสามารถใช้คุณสมบัติเพิ่มเติมเพื่อกำหนดเงื่อนไขที่รองรับอื่น ๆ ด้านล่างเป็นตัวอย่างการตั้งค่าเงื่อนไขโดยใช้ MailQuery. ตัวอย่างโค้ดต่อไปนี้แสดงวิธีกรองอีเมลตาม:
- วันที่วันนี้.
- ช่วงวันที่.
- จากผู้ส่งเฉพาะ.
- จากโดเมนเฉพาะ.
- จากผู้รับเฉพาะ.
วันที่วันนี้
โค้ดตัวอย่างต่อไปนี้แสดงวิธีกรองอีเมลตามวันที่วันนี้.
ช่วงวันที่
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีกรองอีเมลตามช่วงวันที่
ผู้ส่งเฉพาะ
โค้ดตัวอย่างต่อไปนี้แสดงวิธีกรองอีเมลตามผู้ส่งเฉพาะ.
โดเมนเฉพาะ
โค้ดตัวอย่างต่อไปนี้แสดงวิธีกรองอีเมลตามโดเมนเฉพาะ.
ผู้รับเฉพาะ
โค้ดตัวอย่างต่อไปนี้แสดงวิธีกรองอีเมลตามผู้รับเฉพาะ.
การสร้างคิวรีขั้นสูง
หากแตกต่าง 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 ให้ความสามารถในการค้นหาข้อความจากกล่องจดหมายและแสดงรายการพร้อมการสนับสนุนการแบ่งหน้า โค้ดตัวอย่างต่อไปนี้แสดงวิธีการกรองข้อความด้วยการแบ่งหน้า.