@ Afsar,
POP3 - старый протокол, и он НЕ активно развивается в настоящее время.Лучше использовать IMAP вместо него.POP3 не позволяет осуществлять извлечение краткой информации о почтовых сообщениях в качестве групповой операции.Вот почему, когда мы получаем список информации о сообщениях, мы должны делать с сервером то же количество запросов, что и количество сообщений в списке.Это приводит к длительному времени эксплуатации.Чтобы избежать этого, мы реализовали возможность загрузки информации сообщений позже по запросу.Более подробную информацию можно загрузить с помощью метода LoadMessageInfoList.См. Фрагмент кода ниже.
Pop3Client client = createPop3Client();
try {
Pop3MessageInfoCollection messageInfoCol = client.listMessages(Pop3ListFields.SequenceNumber);
int pageSize = 20;
List<List<Pop3MessageInfo>> pages = new ArrayList<List<Pop3MessageInfo>>();
List<Pop3MessageInfo> page = new ArrayList<Pop3MessageInfo>();
for (int i = 0; i < messageInfoCol.size(); i++)
{
Pop3MessageInfo messageInfo = messageInfoCol.get_Item(i);
if (page.size() < pageSize)
{
page.add(messageInfo);
continue;
}
else
{
client.loadMessageInfoList(page);
pages.add(page);
page.clear();
page.add(messageInfo);
}
}
if (page.size() > 0)
{
client.loadMessageInfoList(page);
pages.add(page);
}
} finally {
client.dispose();
}
Ниже приведен код на основе IMAP:
ImapClient client = new ImapClient("exchange.domain.com", "username", "password");
int itemsPerPage = 500;
client.selectFolder(ImapFolderInfo.IN_BOX);
List<ImapPageInfo> pages = new ArrayList<ImapPageInfo>();
ImapPageInfo pageInfo = client.listMessagesByPage(itemsPerPage);
System.out.println("Pages: " + pageInfo.getTotalCount());
pages.add(pageInfo);
int iPageCount = 1;
while (!pageInfo.getLastPage())
{
pageInfo = client.listMessagesByPage(pageInfo.getNextPage());
pages.add(pageInfo);
iPageCount += 1;
System.out.println(iPageCount);
}
int retrievedItems = 0;
for (ImapPageInfo folderCol : pages)
retrievedItems += folderCol.getItems().size();
System.out.println(retrievedItems);