如何使用JavaMail从Google Mail(Gmail)读取带有多个标签的电子邮件?

4
在Google邮件中,我想获取已分配多个标签的邮件。例如,在收件箱中,我们有三封电子邮件:

带有Label_A和Label_B的Email_1

带有Label_A和Label_B的Email_2

带有Label_A和Label_C的Email_3

然后,我想选择同时带有Label_A和Label_B的邮件,这些邮件是Email_1和Email_2。目前以下代码适用于一个标签的情况,但是否有任何方法可以使用多个标签?谢谢。


Properties props = System.getProperties();
Session session = Session.getInstance(props, null);

Store store = session.getStore("imaps");
store.connect("imap.gmail.com", -1, "abc@def.com", "password");

Folder folder = store.getDefaultFolder();

folder = folder.getFolder("Label_A");
folder.open(Folder.READ_WRITE);      

int totalMessages = folder.getMessageCount();
int newMessages = folder.getNewMessageCount();
System.out.println("Total messages = " + totalMessages);
System.out.println("New messages = " + newMessages);


我有一个非常类似的问题。我想能够说一条消息有两个标签。我可以轻松地从两个文件夹中获取消息,但我不确定正确的关联两个消息的方法。 - GreenKiwi
2个回答

2
您应该能够像这样做:
private Store store;
private Folder Label_A; 
private Folder Label_B; 
    ...
        Label_A = store.getFolder("Label_A"); 
        Label_B = store.getFolder("Label_B"); 

1
你如何确定一个消息在它们每一个中都存在?这个序列是不同的,UID也是不同的,而且不能保证MessageID存在或唯一。 - GreenKiwi

1
我最终不得不编写自己的原始IMAP命令,以允许javamail使用Gmail的IMAP扩展。然后这个方法就可以工作了。
你可以使用访问Gmail标签:X-GM-LABELS
然后你可以使用folder.doCommand()来执行你的命令。

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