Gmail POP3在Java应用程序中未获取所有邮件

8
我已启用Gmail的POP3设置。我能够在Java应用程序中使用我的密码连接到POP3存储。我收件箱中有大约10,000封电子邮件。
当我调用收件箱文件夹上的getMessages时,它仅返回280封旧邮件。在循环中调用getMessages时,每次调用都会返回相同的邮件。我还尝试过getMessages(start, end),但它没有返回其他超过280封的邮件。
如何检索其他邮件?

感谢 @theDmi 的努力。 - user2618875
2个回答

1
默认情况下,GMail的POP3和IMAP服务器不像标准的POP3或IMAP服务器那样工作,并且隐藏那些使用这些协议的客户端的消息(以及具有其他非标准行为)。
如果您想配置您的GMail POP3或IMAP设置,使其按照它们的协议规范所要求的方式工作,您需要通过Web浏览器登录到您的GMail帐户,并导航到您的GMail“设置”页面的“转发和POP/IMAP”选项卡,将您的选项设置如下:
POP3下载
[X] 为“所有邮件”启用POP(即使是已经下载过的邮件)
IMAP访问
[X] 启用IMAP
[X] 自动清除关闭-等待客户端更新服务器
[X] 立即永久删除消息

1
@jstedfast,我已经配置了POP3设置,请看这里:链接。但仍然无法获取我收件箱中的所有邮件。 - user2618875
看起来你似乎没有点击“所有邮件”选择按钮。 - Bill Shannon
@Bill Shannon 感谢您的回复,请查看POP3设置。您是否仍然指向不同的设置? - user2618875

0

这不是一个真正的答案,但我通过使用Mailkit的IMAP解决了这个问题。此外,这是C#代码,而不是Java代码,但也许它可以帮助遇到同样问题的人:

      var emails = new List<EmailMessage>();

      using (var client = new ImapClient())
      {
        client.Connect("imap.gmail.com", _smtpConfig.SSLIMAPPort, SecureSocketOptions.SslOnConnect);
        client.ServerCertificateValidationCallback = (s, c, h, e) => true;
        client.SslProtocols = System.Security.Authentication.SslProtocols.Tls12;
        client.AuthenticationMechanisms.Remove("XOAUTH2");
        client.Authenticate(smtpConfig.PopUsername, smtpConfig.PopPassword);

        client.Inbox.Open(FolderAccess.ReadWrite);
        var items = client.Inbox.Fetch(0, -1, MessageSummaryItems.UniqueId | MessageSummaryItems.BodyStructure);

        foreach (var item in items)
        {
          if (item.TextBody != null)
          {
            var mime = (TextPart)client.Inbox.GetBodyPart(item.UniqueId, item.TextBody);
            var text = mime.Text;

            var email = new EmailMessage
            {
              Body = text
            };

            emails.Add(email);
          }
        }

        client.Disconnect(true);
      }

      return emails;

Thanks to jstedfast - it was all done using his docs.

1
这确实是正确的做法。GMail的POP3支持基本上已经失效了,因为他们希望您使用“下载并删除”类型的客户端,并且默认情况下,在您“删除”他们显示给您的邮件之前,不会向您显示更多的邮件。 - Max
1
你的另一个选择是查看过去30天的电子邮件。作为一种协议,POP3并不真正被设计为“同步”协议,并且在处理成千上万封邮件时无法很好地扩展。鉴于这一点,Gmail已经削弱了它。 - Max
谢谢Max - 我已经看了一会儿,但我并不完全明白为什么它不起作用。希望这能帮助其他人。Mailkit的文档非常好,但前提是你知道自己在寻找什么(就像任何好的文档一样)。 - VSO
你最好将你的后续问题作为一个新问题来提出,而不是作为赏金问题;因为这与原来的问题无关,它不涉及POP3、Java或JavaMail。 - Max
@Max 我无法取消悬赏,所以我的逻辑是它可能会给某个人,虽然你是对的。 - VSO

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接