首页 > 解决方案 > 使用 IMAP 协议从 java 读取邮件但缺少一些文件

问题描述

我正在春季启动项目中工作,我需要阅读邮件的详细信息。

首先,我将未读邮件存储到 message[] 数组中,我正在阅读前 50 封邮件,然后再阅读下 50 封邮件,依此类推。

但是当我这样做时,有些邮件丢失了,即在 50 封邮件中,有一些邮件没有被阅读,也没有记录详细信息。

下面是我执行所有这些操作的函数。

请帮助我改进我的代码。

public List<Object> read(){

    Properties properties = new Properties();
    properties.setProperty("mail.host", "imap.gmail.com");
    properties.setProperty("mail.port", "995");
    properties.setProperty("mail.transport.protocol", "imaps");
    String userName=resourceBundle.getString("mailUserName");
    String password=resourceBundle.getString("mailPassword");
    Session session = Session.getInstance(properties,
            new Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(userName, password);
                }
            });

    try {

        Store store = session.getStore("imaps");
        store.connect();
        Folder inbox = store.getFolder("INBOX");
        inbox.open(Folder.READ_WRITE);
        SearchTerm recentTerm = new FlagTerm(new Flags(Flags.Flag.RECENT), true);
        SearchTerm fromTerm = new FromTerm(new InternetAddress(resourceBundle.getString("receiveMailFrom")));
        SearchTerm unreadTerm = new FlagTerm(new Flags(Flags.Flag.SEEN), false);
        SearchTerm subjectTerm = new SubjectTerm(this.subjectTerm);
        SearchTerm subjectAndUnreadTerm = new AndTerm(subjectTerm, unreadTerm);
        SearchTerm recentAndFromTerm = new AndTerm(recentTerm, fromTerm);
        SearchTerm subjectAndUnreadAndFromTerm = new AndTerm(subjectAndUnreadTerm, fromTerm);
        Message messages[] = inbox.search(subjectAndUnreadAndFromTerm);
        List<Object> readParams=new ArrayList<>();
        if (messages.length<count)
        logger.info("Number of mails = " + messages.length);
        else
            logger.info("Number of mails = " + count);


        for (Message message : messages) {
            if(mailcount<count) {
                Address[] from = message.getFrom();
                logger.info("-------------------------------");
                logger.info("Date : " + message.getSentDate());
                logger.info("From : " + from[0]);
                logger.info("Subject: " + message.getSubject());
                logger.info("Content :");
                fileNames = processMessageBody(message);
                logger.info("--------------------------------");
                mailcount +=1;

            }
            else{
                break;
            }

        }

        inbox.close(true);
        store.close();
        if(messages.length==0)
        {
            readParams.add(0);
            return readParams;
        }
        else {
            readParams.add(1);
            readParams.add(fileNames);
            return readParams;
        }
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

标签: javaspring-bootspring-data-jpajakarta-mailimap

解决方案


推荐阅读