Exchange 사서함에서 메시지 필터링
EWS를 사용한 메시지 필터링
다음은 IEWSClient class는 다음을 제공합니다 listMessages() 메일함에서 모든 메시지를 가져오는 메서드입니다. 특정 조건에 일치하는 메시지만 가져오려면 오버로드된 메서드를 사용하십시오. listMessages() 매개변수를 받는 메서드 MailQuery 클래스를 인수로 사용합니다. MailQuery 클래스는 날짜, 제목, 발신자 및 수신자 등 조건을 지정하기 위한 다양한 속성을 제공합니다. 또한 API는 메일함에서 이메일을 검색할 때 대소문자 구분 필터를 적용할 수 있도록 합니다.
메시지 필터링
사서함에서 필터링된 메시지를 가져오려면:
- Exchange 서버에 연결합니다.
- MailQuery 인스턴스를 만들고 원하는 속성을 설정합니다.
- 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);
문자열 값으로 메시지 필터링
다음 코드 스니펫은 헤더(제목, 보낸 사람, 받는 사람, 참조)에서 지정된 문자열을 기준으로 모든 이메일을 필터링하는 방법을 보여줍니다. 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();
}