aspose email thr操作'FetchMessage'终止。已达到超时'100000'

问题描述 投票:0回答:2

我正在为电子邮件自动化开发RPA。我正在使用电子邮件服务aspose。我间歇地得到Timeout异常。虽然有一个setTimeout()api可以用来等到通过时间。

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

无论如何使用分页概念,以便我可以一次性获取有限数量的邮件消息?

java email-attachments aspose
2个回答
0
投票

@官员,

我观察了您分享的问题,并请求您提供源文件以及示例代码和环境详细信息。我还建议你首先尝试使用最新的Aspose.Email 19.2。

我是Aspose的支持开发人员/传播者。


0
投票

@官员,

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);
© www.soinside.com 2019 - 2024. All rights reserved.