WebDav를 사용하여 Exchange 사서함에서 메시지 필터링

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는 두 개의 MailQuery 인스턴스를 매개변수로 받는 or() 메서드를 제공합니다. 지정된 두 조건 중 하나라도 만족하는 메시지를 가져옵니다. 아래 예제는 제목에 "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();