java - 使用 JavaMail API 时的 Gmail Imap 与 Pop3

标签 java gmail jakarta-mail gmail-imap gmail-pop

我正在尝试从 Gmail 帐户的收件箱中获取未读邮件。我编写了一个小型演示程序,发现 Gmail 的 pop3 在许多情况下表现出意外

  • 当您尝试获取可用文件夹列表时,Pop3 仅返回收件箱,而不返回所有标签,而 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 Folder List

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 Folder List

  • 即使在检索邮件时,当我设置未读邮件过滤器时,gmail 也会返回许多已读邮件,这些邮件甚至不是收件箱的一部分,而是长期存档的邮件。另一方面,IMAP 的行为符合预期。

附加信息:我仅为新邮件启用了 pop3,而不是从一开始就启用了 pop3

我使用的 pop3 是错误的还是 gmail 中的它损坏了?

最佳答案

显然,POP3 不处理文件夹。我在访问 Exchange 邮箱时遇到了同样的问题 - IMAP 获取文件夹,POP3 只获取收件箱。

我在这里找到了更多信息:How to retrieve gmail sub-folders/labels using POP3?

关于java - 使用 JavaMail API 时的 Gmail Imap 与 Pop3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16897075/

相关文章:

java - 对象实例化涉及的步骤。

java - 使用 void reverse() 方法递归反转句子 (Java)

带有 OVH 的 Javax 邮件 API

java - java mail api中的getInstance错误没有找到合适的方法

java - 将字符串 startTime 和 endTime 与当前时间进行比较并执行操作

java - ZapOfDingBats 字体在输出 pdf 上不正确可见

javascript - GmailApp - 为特定邮件添加标签,而不是线程

android - gmail 通过 oauth SMTPSendFailedException(需要身份验证)

oauth - Google 通讯录只读 (OAuth 2.0)

java - 使用 Spring JavaMailSender 将文件作为附件或内联发送