IMAP 클라이언트를 사용하여 서버에서 메시지 필터링
다음은 ImapClient class는 다음을 제공합니다 listMessages() 메서드는 사서함의 모든 메시지를 가져옵니다. 특정 조건에 일치하는 메시지만 얻으려면 오버로드된 메서드를 사용하십시오 listMessages() 메서드는 ~를 받아들입니다 MailQuery 을 인수로 사용합니다. MailQuery 클래스는 날짜, 제목, 발신자, 수신자 등과 같은 조건을 지정하기 위한 다양한 속성을 제공합니다. 첫 번째 예는 날짜와 제목을 기준으로 메시지를 필터링하는 방법을 보여줍니다. 또한 다른 기준으로 필터링하고 보다 복잡한 쿼리를 구축하는 방법을 보여줍니다. API는 정확한 필터링 기준에 일치하도록 대소문자 구분 검색 기준을 적용할 수 있는 기능도 제공합니다. 또한 메일함에서 메시지를 필터링하기 위한 검색 문자열 인코딩을 지정할 수 있습니다.
사서함에서 메시지 필터링
- IMAP 서버에 연결하고 로그인하기
- 다음의 인스턴스를 생성합니다. MailQuery 그리고 속성을 설정합니다
- 다음을 호출합니다. ImapClient.listMessages(MailQuery query) method에 전달하고 MailQuery 필터링된 메시지만 가져오기 위한 매개변수와 함께.
다음 코드 스니펫은 IMAP 메일함에 연결하고 오늘 도착했으며 제목에 "newsletter" 단어가 포함된 메시지를 가져오는 방법을 보여줍니다.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Connect and log in to IMAP
final String host = "host";
final int port = 143;
final String username = "user@host.com";
final String password = "password";
ImapClient client = new ImapClient(host, port, username, password);
client.selectFolder("Inbox");
// Set conditions, Subject contains "Newsletter", Emails that arrived today
ImapQueryBuilder builder = new ImapQueryBuilder();
builder.getSubject().contains("Newsletter");
builder.getInternalDate().on(new Date());
// Build the query and Get list of messages
MailQuery query = builder.getQuery();
ImapMessageInfoCollection messages = client.listMessages(query);
System.out.println("Imap: " + messages.size() + " message(s) found.");
// Disconnect from IMAP
client.dispose();
특정 기준에 맞는 메시지 가져오기
위의 코드 샘플 이메일 제목과 날짜를 기준으로 메시지를 필터링합니다. 다른 속성을 사용하여 지원되는 다른 조건도 설정할 수 있습니다. 아래는 를 사용하여 조건을 설정하는 몇 가지 예입니다 MailQuery. 다음 코드 스니펫은 다음을 기준으로 이메일을 필터링하는 방법을 보여줍니다:
- 오늘 날짜.
- 날짜 범위.
- 특정 발신자에서.
- 특정 도메인에서.
- 특정 수신자에서.
오늘 날짜
다음 코드 스니펫은 오늘 날짜를 기준으로 이메일을 필터링하는 방법을 보여줍니다.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Emails that arrived today
MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().on(new Date());
~~
### **Date Range*
The following code snippet shows you how to filter emails on the date range.
~~~Java
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// 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());
특정 발신자
다음 코드 스니펫은 특정 발신자를 기준으로 이메일을 필터링하는 방법을 보여줍니다.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Get emails from specific sender
builder.getFrom().contains("saqib.razzaq@127.0.0.1");
특정 도메인
다음 코드 스니펫은 특정 도메인을 기준으로 이메일을 필터링하는 방법을 보여줍니다.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Get emails from specific domain
builder.getFrom().contains("SpecificHost.com");
특정 수신자
다음 코드 스니펫은 특정 수신자를 기준으로 이메일을 필터링하는 방법을 보여줍니다.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Get emails sent to specific recipient
builder.getTo().contains("recipient");
복잡한 쿼리 구축
다른 경우 MailQueryBuilder 속성을 별도의 문장으로 설정하면 모든 조건이 일치합니다. 예를 들어, 날짜 범위와 특정 호스트에서 온 메시지를 가져오려면 세 개의 문장을 작성해야 합니다.
AND로 쿼리 결합
다음 코드 스니펫은 AND로 쿼리를 결합하는 방법을 보여줍니다.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// 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을 사용하여 쿼리를 결합하는 방법을 보여줍니다.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Specify OR condition
builder.or(builder.getSubject().contains("test"), builder.getFrom().contains("noreply@host.com"));
InternalDate 기반 필터링
메시지는 InternalDate를 기준으로 서버에서 추출할 수 있지만, 때때로 서버가 인박스에 보이는 모든 메시지를 반환하지 않을 수 있습니다. 그 이유는 서버 시간대가 UTC가 아닐 수 있기 때문이며, 다음과 같은 서버가 있습니다 Gmail. Aspose는 008 SEARCH ON 4-May-2014와 같은 명령을 보냅니다. IMAP 프로토콜 하지만 결과는 서버 시간대 설정에 따라 다를 수 있습니다. 새 멤버가 다음에 추가되었습니다 ImapMessageInfo as InternalDate 이는 메시지 필터링에 추가로 도움이 됩니다. 다음 코드 스니펫은 사용법을 보여줍니다 InternalDate 메시지를 필터링하기 위해.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Connect and log in to IMAP
final String host = "host";
final int port = 143;
final String username = "user@host.com";
final String password = "password";
ImapClient client = new ImapClient(host, port, username, password);
client.selectFolder("Inbox");
// Set conditions, Subject contains "Newsletter", Emails that arrived today
ImapQueryBuilder builder = new ImapQueryBuilder();
builder.getSubject().contains("Newsletter");
builder.getInternalDate().on(new Date());
// Build the query and Get list of messages
MailQuery query = builder.getQuery();
ImapMessageInfoCollection messages = client.listMessages(query);
for (ImapMessageInfo info : messages) {
System.out.println("Internal Date: " + info.getInternalDate());
}
// Disconnect from IMAP
client.dispose();
대소문자 구분 이메일 필터링
다음 코드 스니펫은 대소문자 구분 이메일 필터링을 사용하는 방법을 보여줍니다.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Set conditions, Subject contains "Newsletter", Emails that arrived today
ImapQueryBuilder builder = new ImapQueryBuilder();
builder.getSubject().contains("Newsletter", true);
builder.getInternalDate().on(new Date());
MailQuery query = builder.getQuery();
쿼리 빌더 인코딩 지정
API의 ImapQueryBuilder 생성자를 사용하여 검색 문자열의 인코딩을 지정할 수 있습니다. 이는 또한 다음을 사용하여 설정할 수 있습니다 DefaultEncoding MailQueryBuilder의 속성입니다. 다음 코드 스니펫은 쿼리 빌더에 대한 인코딩을 지정하는 방법을 보여줍니다.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Set conditions
ImapQueryBuilder builder = new ImapQueryBuilder(Charset.forName("utf-8"));
builder.getSubject().contains("ğüşıöç", true);
MailQuery query = builder.getQuery();
페이지 매김 지원 메시지 필터링
다음은 ImapClient 메일함에서 메시지를 검색하고 페이지 매김을 지원하여 나열하는 기능을 제공합니다. 다음 코드 스니펫은 페이지 매김을 지원하는 메시지 필터링 방법을 보여줍니다.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
/// <summary>
/// This example shows how to search for messages using ImapClient of the API with paging support
/// Introduced in Aspose.Email for .NET 6.4.0
/// </summary>
final ImapClient client = new ImapClient("host.domain.com", 84, "username", "password");
try {
try {
// Append some test messages
int messagesNum = 12;
int itemsPerPage = 5;
MailMessage message = null;
for (int i = 0; i < messagesNum; i++) {
message = new MailMessage("from@domain.com", "to@domain.com", "EMAILNET-35128 - " + UUID.randomUUID(), "111111111111111");
client.appendMessage(ImapFolderInfo.IN_BOX, message);
}
String body = "2222222222222";
for (int i = 0; i < messagesNum; i++) {
message = new MailMessage("from@domain.com", "to@domain.com", "EMAILNET-35128 - " + UUID.randomUUID(), body);
client.appendMessage(ImapFolderInfo.IN_BOX, message);
}
client.selectFolder("Inbox");
ImapQueryBuilder iqb = new ImapQueryBuilder();
iqb.getBody().contains(body);
MailQuery query = iqb.getQuery();
client.selectFolder(ImapFolderInfo.IN_BOX);
ImapMessageInfoCollection totalMessageInfoCol = client.listMessages(query);
System.out.println(totalMessageInfoCol.size());
//////////////////////////////////////////////////////
List<ImapPageInfo> pages = new ArrayList<ImapPageInfo>();
PageSettings ps = new PageSettings();
ps.setFolderName(ImapFolderInfo.IN_BOX);
PageInfo pi = new PageInfo(itemsPerPage);
ImapPageInfo pageInfo = client.listMessagesByPage(query, pi, ps);
pages.add(pageInfo);
while (!pageInfo.getLastPage()) {
pageInfo = client.listMessagesByPage(query, pageInfo.getNextPage(), ps);
pages.add(pageInfo);
}
int retrievedItems = 0;
// foreach to while statements conversion
for (ImapPageInfo folderCol : pages) {
retrievedItems += folderCol.getItems().size();
}
} finally {
}
} finally {
if (client != null)
client.dispose();
}
사용자 정의 플래그로 메시지 필터링
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
ImapQueryBuilder queryBuilder = new ImapQueryBuilder();
queryBuilder.hasFlags(ImapMessageFlags.keyword("custom1"));
queryBuilder.hasNoFlags(ImapMessageFlags.keyword("custom2"));
사용자 정의 검색으로 메시지 필터링
예를 들어 RFC 3501 표준은 메시지에 첨부 파일이 존재하는지 여부를 기준으로 검색하는 것을 허용하지 않습니다. 그러나 Gmail은 제공합니다 IMAP 확장 기능 이러한 검색을 수행할 수 있게 합니다. Aspose.Email은 customSearch 메서드 ImapQueryBuilder 해당 쿼리를 만들기 위한 클래스.
아래 코드 샘플은 IMAP 프로토콜과 사용자 정의 검색 기준을 사용하여 첨부 파일이 있는 이메일 메시지 목록을 서버에서 가져오는 방법을 보여줍니다:
ImapQueryBuilder builder = new ImapQueryBuilder();
builder.customSearch("X-GM-RAW \"has:attachment\"");
MailQuery query = builder.getQuery();
messageInfoCol = client.listMessages(query);