'aspose email throwing The operation 'FetchMessage' terminated. Timeout '100000' has been reached
I am developing RPA for email automation . I am using email service aspose. I am getting Timeout exception intermittently.Although there is a setTimeout() api which can be use to wait till passed time.
My understanding is that due to increased number of messages in mail box it is taking longer time to gather/populated mail message.
Is there anyway to use pagination concept so that I can fetch limited number of mail messages at one shot?
Solution 1:[1]
POP3 is old protocol and It does NOT actively develops now. It's better to use IMAP instead of it. POP3 does not allow to implement retrieving of brief information about mail messages as group operation. That's why when we retrieve list of message info, we have to do to the server the same number of requests like number of messages in list. That's leads to long time of operation. To avoid of it we implemented ability to load messages info later by request. More detailed information can be loaded with LoadMessageInfoList method. Please see code snippet below.
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();
}
The following is IMAP based code:
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);
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Wai Ha Lee |
