aspose电子邮件抛出操作“ FetchMessage”终止。已达到超时“ 100000”

时间:2019-03-02 17:19:10

标签: java email-attachments aspose

我正在开发用于电子邮件自动化的RPA。我正在使用电子邮件服务。 我间歇性地收到超时异常。尽管有一个setTimeout()API,可以用来等待经过的时间。

我的理解是,由于邮箱中邮件数量的增加,收集/填充邮件消息花费的时间更长。

反正有没有使用分页的概念,这样我一次就能提取有限数量的邮件?

2 个答案:

答案 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);