Gmail Imap против Pop3 при использовании JavaMail API

Я пытаюсь получить непрочитанную почту из INBOX из учетной записи Gmail. Я написал небольшую демонстрационную программу и обнаружил, что pop3 в Gmail неожиданно ведет себя в ряде ситуаций

  • Когда вы пытаетесь получить список доступных папок, Pop3 возвращает только INBOX, а не все метки, пока IMAP делает это правильно. Я вставляю код здесь.

POP3

public static Result getPop3FolderList()
{
    Properties props = System.getProperties();
    props.put("mail.store.protocol", "pop3s");
    props.put("mail.pop3.host", "pop.gmail.com");     
    props.put("mail.pop3.user", Application.email);
    props.put("mail.pop3.socketFactory", 995);
    props.put("mail.pop3.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    props.put("mail.pop3.port", 995);

    Session session = Session.getInstance(props,new Authenticator() {
      @Override
      protected PasswordAuthentication getPasswordAuthentication() {
          return new PasswordAuthentication(Application.email, Application.pwd);

      }
    });

    try{
        Store store=session.getStore("pop3");
        store.connect(Application.email,Application.pwd);

        javax.mail.Folder[] folders = store.getDefaultFolder().list("*");

        String opHtml = "<ul>";
        for (javax.mail.Folder folder : folders) {
            if ((folder.getType() & javax.mail.Folder.HOLDS_MESSAGES) != 0) {
                opHtml += "<li>" + folder.getFullName()+ "+" + folder.getMessageCount() + "</li>";
            }
        }
        opHtml += "</ul>";
        return ok(opHtml).as("text/html");
    } catch(MessagingException e) {
        return ok("Error in getting list.<br />" + e.getMessage()).as("text/html");
    }
}

Список папок POP3

IMAP

public static Result getImapFolderList()
{
  Properties props = System.getProperties();
  props.setProperty("mail.store.protocol", "imaps");
  try {
      Session session = Session.getInstance(props,new Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(Application.email, Application.pwd);
        }
      });

      javax.mail.Store store = session.getStore("imaps");
      store.connect("imap.gmail.com", Application.email, Application.pwd);
      javax.mail.Folder[] folders = store.getDefaultFolder().list("*");

      String opHtml = "<ul>";
      for (javax.mail.Folder folder : folders) {
          if ((folder.getType() & javax.mail.Folder.HOLDS_MESSAGES) != 0) {
              opHtml += "<li>" + folder.getFullName()+ ":" + folder.getMessageCount() + "</li>";
          }
      }
      opHtml += "</ul>";
      return ok(opHtml).as("text/html");
  } catch (MessagingException e) {
      return ok("Error in getting list.<br />").as("text/html");
  }
}

Список папок IMAP

  • Даже при получении почты, когда я устанавливаю фильтр непрочитанных писем, gmail возвращает количество прочитанных писем, которые даже не являются частью входящей почты, но являются длинными заархивированными. IMAP, с другой стороны, ведет себя ожидаемо.

Дополнительная информация: я включил pop3 только для новой почты, а не с самого начала

Я использую pop3 неправильно или он сломан в gmail?

1 ответ

Решение

По-видимому, POP3 не обрабатывает папки. У меня была такая же проблема при доступе к почтовым ящикам Exchange - IMAP получает папки, POP3 получает только Входящие.

Я нашел больше информации здесь: Как получить подпапки / ярлыки Gmail, используя POP3?

Другие вопросы по тегам