javax.mail через Office365 проблемы чтения и ComparisonTerm - PullRequest
0 голосов
/ 14 мая 2018

Я просто пытаюсь прочитать все сообщения в папке «Входящие», а затем разделить их на категории «прочитанные», «непрочитанные» и «большие или равные». Пожалуйста, смотрите мои коды ниже. Раздел имени пользователя и пароля пройден.

Обычно код очень прост, но я не понимаю, почему я просто получаю все письма.

Между тем я уверен, что читаю сообщения. Также даты получения писем отличаются, и у нас есть новые письма.

У меня нет исключений или ошибок.

Также проверено ниже и еще пара вопросов.

Чтение последних и невидимых сообщений с использованием javax.mail


    Properties props = new Properties();
    props.put("mail.host", "outlook.office365.com");
    props.put("mail.store.protocol", "pop3s");
    props.put("mail.pop3s.auth", "true");
    props.put("mail.pop3s.port", "995");

    Session session = Session.getInstance(props, new avax.mail.Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(username, passwd);
        }
    });

    Security.setProperty("ssl.SocketFactory.provider", "com.ibm.jsse2.SSLSocketFactoryImpl");
    //Security.setProperty("ssl.ServerSocketFactory.provider", "com.ibm.jsse2.SSLServerSocketFactoryImpl");

    Store store = session.getStore("pop3s");
    store.connect();
    Folder emailFolder = store.getFolder("INBOX");
    emailFolder.open(Folder.READ_ONLY);

    Calendar myCal = new GregorianCalendar();
    myCal.setTime(new Date());
    myCal.add(Calendar.DAY_OF_MONTH, -1);

    // retrieve the messages from the folder in an array and print it
    Message[] messages = emailFolder.getMessages();
    System.out.println("ALL : " + messages.length);

    messages =  emailFolder.search(new FlagTerm(new Flags(Flags.Flag.SEEN), false));
    //messages =  emailFolder.search(new FlagTerm(new Flags(Flag.SEEN), false));    // not working also
    System.out.println("UNREAD : " + messages.length);

    messages =  emailFolder.search(new FlagTerm(new Flags(Flags.Flag.SEEN), true));
    //messages =  emailFolder.search(new FlagTerm(new Flags(Flag.SEEN), true));     // not working also

    System.out.println("READ : " + messages.length);

    messages =  emailFolder.search(new ReceivedDateTerm(ComparisonTerm.GE, myCal.getTime()));
    System.out.println("ReceivedDateTerm : " + messages.length);

Результат есть; ALL: 18 UNREAD: 18 ЧИТАЙТЕ: 0 ReceivedDateTerm: 0

Спасибо

1 Ответ

0 голосов
/ 14 мая 2018

Как описано в javadocs для пакета com.sun.mail.pop3 , протокол POP3 не поддерживает постоянные флаги, поэтому нет способа определить, является ли сообщение НЕДАВНО или ВИДЕНО.Вместо этого используйте imap.

Кроме того, вы захотите исправить эти распространенные ошибки JavaMail .

...