WebDav를 사용하여 Exchange 사서함에서 메시지 필터링
Web Dav를 사용하여 메시지 필터링
사서함에서 필터링된 메시지를 가져오려면:
- Exchange 서버에 연결합니다.
- MailQuery 인스턴스를 만들고 원하는 속성을 설정합니다.
- 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();