Чтение писем и из Java с использованием протокола IMAP, но отсутствует какой-либо файл - PullRequest
0 голосов
/ 01 мая 2019

Я работаю над проектом в весенней загрузке, где мне нужно прочитать детали писем.

Сначала я сохраняю непрочитанные письма в массиве 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...