กรองข้อความจากกล่องจดหมาย Exchange โดยใช้ WebDav

กรองข้อความโดยใช้ Web Dav

เพื่อดึงข้อความที่กรองจากกล่องจดหมาย:

  1. เชื่อมต่อกับเซิร์ฟเวอร์ Exchange.
  2. สร้างอินสแตนซ์ของ MailQuery และตั้งค่าคุณสมบัติที่ต้องการ.
  3. เรียกเมธอด ExchangeClient.listMessages(MailQuery query) และส่ง MailQuery เป็นพารามิเตอร์เพื่อดึงเฉพาะข้อความที่กรองแล้ว

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

ExchangeClient client = new ExchangeClient("http://MachineName/exchange/Username", "username", "password", "domain");
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");

// Query building by means of ExchangeQueryBuilder class
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();
// Subject contains "Newsletter"
builder.getSubject().contains("Newsletter");

// Emails that arrived today
try {
	builder.getInternalDate().on(sdf.parse("10/05/2016 10:00:00"));
} catch (ParseException e) {
	e.printStackTrace();
}

// Build the query
MailQuery query = builder.getQuery();

// Get list of messages
ExchangeMessageInfoCollection messages = client.listMessages(client.getMailboxInfo().getInboxUri(), query, false);
System.out.println("Imap: " + messages.size() + " message(s) found.");

ดึงข้อความที่ตรงกับเงื่อนไขเฉพาะ

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

เงื่อนไขการกรองวันที่วันนี้

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

// Emails that arrived today
MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().on(new Date());

เงื่อนไขการกรองช่วงวันที่

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

MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().beforeOrEqual(new Date());
builder.getInternalDate().since(new Date(new Date().getTime() + TimeUnit.DAYS.toDays(1)));

เงื่อนไขการกรองผู้ส่งเฉพาะ

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

MailQueryBuilder builder = new MailQueryBuilder();
// Get emails from specific sender
builder.getFrom().contains("saqib.razzaq@127.0.0.1");

เงื่อนไขการกรองโดเมนเฉพาะ

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

MailQueryBuilder builder = new MailQueryBuilder();
// Get emails from specific domain
builder.getFrom().contains("SpecificHost.com");

เงื่อนไขการกรองผู้รับเฉพาะ

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

MailQueryBuilder builder = new MailQueryBuilder();
// Get emails sent to specific recipient
builder.getTo().contains("recipient");

เงื่อนไขการกรองตาม MessageID

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

// Get email with specific MessageId
ExchangeQueryBuilder builder1 = new ExchangeQueryBuilder();
builder1.getMessageId().equals("MessageID");

เงื่อนไขการกรองทั้งหมดของการแจ้งเตือนการจัดส่งเมล

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

// Get Mail Delivery Notifications
builder1 = new ExchangeQueryBuilder();
builder1.getContentClass().equals(ContentClassType.getMDN().toString());

การสร้างคิวรีซับซ้อน

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

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

MailQueryBuilder builder = new MailQueryBuilder();

// Emails from specific host
builder.getFrom().contains("SpecificHost.com");
// AND all emails that arrived before today
builder.getInternalDate().before(new Date());
// AND all emails that arrived since 7 days ago
builder.getInternalDate().since(new Date(new Date().getTime() + TimeUnit.DAYS.toDays(-7)));

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

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

MailQueryBuilder builder = new MailQueryBuilder();
		
// Specify OR condition
builder.or(builder.getSubject().contains("test"), builder.getFrom().contains("noreply@host.com"));

การกรองอีเมลแบบแยกแยะตัวพิมพ์ใหญ่-เล็ก

อีเมลสามารถกรองตามการแยกแยะตัวพิมพ์ใหญ่-เล็กได้โดยระบุแฟล็ก IgnoreCase ในเงื่อนไขการกรองตามตัวอย่างต่อไปนี้.

//IgnoreCase is True
MailQueryBuilder builder1 = new MailQueryBuilder();
builder1.getFrom().contains("tesT", true);
MailQuery query1 = builder1.getQuery();