首页 新闻 搜索 专区 学院

如何提高javaxMail 的收取邮件的效率

0
悬赏园豆:50 [待解决问题]

最近在写一个收件功能,由于收件箱里面的邮件太多导致收件时间比较长,2000封左右耗时30分钟左右,后来采用了javaMail 提供的筛选类 SearchTerm ,但是发现,这个类也是需要先把收件箱所有的邮件拿到之后再进行筛选的,期望大佬有新的解决方案,邮箱协议采用的时pop3

由于代码拷贝不出来,就简单写一下

     // 连接会话......
    // 获得收件箱 只能获取一个月内的邮件
    Folder folder = store.getFolder("INBOX");
    // 如果要读写的话可以选择READ_WRITE
    folder.open(Folder.READ_ONLY);

    // 筛选收件箱中指定时间段的邮件并将文件保存到本地
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Date start = sdf.parse("2021-08-10");
    Date end = sdf.parse("2021-08-11");
    SearchTerm comparisonTermGe = new SentDateTerm(ComparisonTerm.GE, start);
    SearchTerm comparisonTermLe = new SentDateTerm(ComparisonTerm.LE, end);
    SearchTerm st = new AndTerm(comparisonTermGe, comparisonTermLe);
    Message[] messages = folder.search(st);
    //Message[] messages = folder.getMessages();
    //以下为获取邮件后的业务处理
    Map<String, List<String>> excelFilePaths = parseFileMessage(messages);
永无Bug!!的主页 永无Bug!! | 初学一级 | 园豆:152
提问于:2021-08-10 16:39
< >
分享
所有回答(2)
1

1、从源头解决,,去邮箱里面把一些 邮件给屏蔽了,,广告、无用的通知等,一下子少个一千多吧?
2、多线程拉邮件,,一个线程拉比较慢的话,100个呢?对于这种IO型任务,搞个 100个线程跑应该没问题;
Future & Callback接口 了解下,还有更多;
3、增加你 客户端的带宽;
FYI

快乐的凡人721 | 园豆:1379 (小虾三级) | 2021-08-10 21:31
0

纯代码层面的话,考虑多线程,拉取实际邮件分成一个个任务去拉取

素手揽清风 | 园豆:219 (菜鸟二级) | 2021-10-15 19:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册