我已为我的Gmail启用了POP3设置。我可以在Java应用程序中使用我的密码连接到POP3商店。我的收件箱中有大约10k条消息。
当我在收件箱文件夹中调用getMessages
时,它只返回280条旧邮件。当我在循环中调用getMessages
时,每次调用都会返回相同的消息。我也尝试了getMessages(start, end)
但它没有返回除280之外的其他消息。
如何检索其他消息?
答案 0 :(得分:0)
默认情况下,GMail的POP3和IMAP服务器的行为与标准POP3或IMAP服务器不同,并使用这些协议隐藏来自客户端的消息(以及具有其他非标准行为)。
如果您要将GMail POP3或IMAP设置配置为按照其协议规范的方式执行POP3和IMAP的行为,则需要通过Web浏览器登录到您的GMail帐户并导航到您的GMail Forwarding and POP/IMAP
页面的Settings
标签,并将您的选项设置为:
POP3下载
[X]为所有邮件启用POP(即使已下载的邮件)
IMAP访问
[X]启用IMAP
[X]自动清除 - 等待客户端更新服务器
[X]立即删除邮件
答案 1 :(得分: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.