java – 获取’seen’标志似乎不起作用

我正在玩java的默认pop3实现,并且无法让它读取标志的实际状态(我认为).

这是(缩写)代码:

Store store = null;
Folder folder = null;
try
{
    Session mailSession = Session.getInstance(new Properties(), null);
    store = mailSession.getStore("pop3");
    store.connect(host, addr, pwd);
    folder = store.getFolder("INBOX");
    folder.open(Folder.READ_WRITE);

    for (Message msg : folder.getMessages())
    {
        if (msg.isSet(Flag.SEEN))
            continue;

        LOG.debug("processing email titled '" + msg.getSubject()
                + "' from '" + msg.getFrom()[0] + "'");

        ... do some stuff

        msg.setFlag(Flag.SEEN, true);
    }
}
finally
{
        if (folder != null)
            folder.close(true);
        if (store != null)
            store.close();
}

问题是,每次执行上面的代码时,都会处理相同的消息(所有这些消息),因为对msg.isSet(Flag.SEEN)的调用总是返回false,即使我在上一次迭代中将其设置为true .

Webmail客户端甚至反映了正在设置的标志(标题从粗体更改为普通字体).

有谁知道我做错了什么?

谢谢,p.

解决方法:

进一步阅读告诉我pop3不支持设置/获取这些标志,只删除消息.

似乎pop3支持设置标志(因为我可以看到该标志已在webmail程序中成功设置),但随后无法读取标志状态.

谢天谢地,我的邮件服务器支持imap,它按预期完成所有操作.我只需要将我的代码从mailSession.getStore(“pop3”)更改为mailSession.getStore(“imap”).

上一篇:保存电子邮件附件(python3,pop3_ssl,gmail)


下一篇:java – 计算Gmail INBOX中的电子邮件数量