我正在开发用于电子邮件自动化的RPA。我正在使用电子邮件服务。 我间歇性地收到超时异常。尽管有一个setTimeout()API,可以用来等待经过的时间。
我的理解是,由于邮箱中邮件数量的增加,收集/填充邮件消息花费的时间更长。
反正有没有使用分页的概念,这样我一次就能提取有限数量的邮件?
答案 0 :(得分:0)
@Afsar,
我已观察到您共享的问题,请您与我们一起提供源文件以及示例代码和环境详细信息。我还建议您先尝试使用最新的Aspose.Email 19.2。
我正在Aspose中担任支持开发人员/宣传人员。
答案 1 :(得分:0)
@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);