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

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

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

การกรองข้อความ

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

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

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

try {
    // Connect to EWS
    final String mailboxUri = "https://outlook.office365.com/ews/exchange.asmx";
    final String username = "username";
    final String password = "password";
    final String domain = "domain";

    IEWSClient client = EWSClient.getEWSClient(mailboxUri, username, password, domain);

    // Query building by means of ExchangeQueryBuilder class
    ExchangeQueryBuilder builder = new ExchangeQueryBuilder();

    // Set Subject and Emails that arrived today
    builder.getSubject().contains("Newsletter");
    builder.getInternalDate().on(new Date());

    MailQuery query = builder.getQuery();

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

    // Disconnect from EWS
    client.dispose();
} catch (java.lang.RuntimeException ex) {
    System.out.println(ex.getMessage());
}

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

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

กรองข้อความตามวันที่วันนี้

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

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

กรองข้อความตามช่วงวันที่

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

// Emails that arrived in last 7 days
Calendar cal = Calendar.getInstance();
builder.getInternalDate().before(cal.getTime());
cal.add(Calendar.DATE, -7);
builder.getInternalDate().since(cal.getTime());

กรองข้อความตามผู้ส่งที่ระบุ

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

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

กรองข้อความตามโดเมนที่ระบุ

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

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

กรองข้อความตามผู้รับที่ระบุ

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

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

กรองข้อความโดย MessageID

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

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

กรองข้อความโดยใช้การแจ้งเตือนการจัดส่งเมล์ทั้งหมด

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

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

กรองข้อความตามขนาด

builder = new ExchangeQueryBuilder();
builder.getItemSize().greater(80000);

กรองข้อความด้วยค่าสตริง

โค้ดตัวอย่างต่อไปนี้แสดงวิธีกรองอีเมลทั้งหมดโดยอิงจากสตริงที่กำหนดในส่วนหัว (หัวเรื่อง, จาก, ถึง, cc). The getText() เมธอดคืนค่าข้อความสตริงพร้อมกับเนื้อหาของข้อความ.

 ExchangeQueryBuilder builder = new ExchangeQueryBuilder();

builder.getText().equals("SomeText");

MailQuery query = builder.getQuery();

ExchangeMessageInfoCollection messages = ewsClient.listMessages("InboxUri", query, false);

กรองข้อความในลำดับเพิ่มลง/ลดลง

Aspose.Email ให้ ComparisonField.orderBy(boolean ascending) เมธอดที่ตั้งค่าบ่งชี้ว่าคลายันต์ใช้การเรียงลำดับจากน้อยไปมากหรือมากไปน้อยบนฟิลด์ค้นหา. มันทำให้คุณเรียงข้อความอีเมลตามลำดับจากน้อยไปมาก/มากไปน้อยตามเกณฑ์ที่ระบุโดย MailQueryBuilder.

ส่วนของโค้ดด้านล่างแสดงวิธีกรองข้อความตามลำดับจากน้อยไปมาก/มากไปน้อย:

MailQueryBuilder builder = new MailQueryBuilder();
builder.getSubject().contains("Report");
builder.getInternalDate().since(sinceDate);
builder.getSubject().orderBy(true); // sort the subject ascending
builder.getInternalDate().orderBy(false); // sort the date descending  

ExchangeMessageInfoCollection miColl = client.listMessages(client.getMailboxInfo().getInboxUri(), builder.getQuery());

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

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

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

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

// Emails from specific host, get all emails that arrived before today and all emails that arrived since 7 days ago
builder.getFrom().contains("SpecificHost.com");
Calendar cal = Calendar.getInstance();
builder.getInternalDate().before(cal.getTime());
cal.add(Calendar.DATE, -7);
builder.getInternalDate().since(cal.getTime());

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

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

builder.or(builder.getSubject().contains("test"), builder.getFrom().contains("noreply@host.com"));

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

อีเมลสามารถกรองโดยพิจารณาความแตกต่างของตัวพิมพ์โดยระบุแฟล็ก IgnoreCase ในเกณฑ์การกรองตามที่แสดงในส่วนของโค้ดต่อไปนี้.

// Query building by means of ExchangeQueryBuilder class
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();
builder.getSubject().contains("Newsletter", true);
builder.getInternalDate().on(new Date());
MailQuery query = builder.getQuery();

การกรองข้อความพร้อมการรองรับการแบ่งหน้า

int itemsPerPage = 5;
String sGuid = UUID.randomUUID().toString();
String str1 = sGuid + " - " + "Query 1";
String str2 = sGuid + " - " + "Query 2";

MailQueryBuilder queryBuilder1 = new MailQueryBuilder();
queryBuilder1.getSubject().contains(str1);
MailQuery query1 = queryBuilder1.getQuery();
List<ExchangeMessagePageInfo> pages = new ArrayList<ExchangeMessagePageInfo>();
ExchangeMessagePageInfo pageInfo = client.listMessagesByPage(client.getMailboxInfo().getInboxUri(), query1, itemsPerPage);
pages.add(pageInfo);
int str1Count = pageInfo.getItems().size();
while (!pageInfo.getLastPage()) {
    pageInfo = client.listMessagesByPage(client.getMailboxInfo().getInboxUri(), query1, itemsPerPage, pageInfo.getPageOffset() + 1);
    pages.add(pageInfo);
    str1Count += pageInfo.getItems().size();
}