有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用JavaMail获取邮件帐户中可用文件夹的列表

我正在使用JavaMail API连接到我的个人帐户。我的Gmail帐户中有我创建的文件夹(标签)列表+收件箱、草稿等默认文件夹。如何列出所有可用文件夹(默认文件夹和用户创建的文件夹)

我可以使用以下API访问特定文件夹:Folder inbox = store.getFolder("Inbox");。是否有其他API来获取邮件帐户中可用的文件夹列表


共 (5) 个答案

  1. # 1 楼答案

    Sergey很接近,但是默认情况下JavaMail的list()执行LIST "" %,这只提供顶级文件夹。GMail将其系统文件夹(所有邮件、草稿、已发送邮件、垃圾邮件、星号和垃圾)放在不可选择的文件夹[Gmail]下,因此您确实需要执行LIST "" *。否则,您将返回INBOX[Gmail]和您的标签

    下面是一些连接到GMail的示例代码,获取文件夹列表,并打印出每个非\NoSelect文件夹的名称和消息计数(即不只是层次结构占位符的文件夹,如[Gmail]):

    Properties props = System.getProperties();
    props.setProperty("mail.store.protocol", "imaps");
    try {
        Session session = Session.getDefaultInstance(props, null);
        javax.mail.Store store = session.getStore("imaps");
        store.connect("imap.gmail.com", "<username>@gmail.com", "<password>");
        javax.mail.Folder[] folders = store.getDefaultFolder().list("*");
        for (javax.mail.Folder folder : folders) {
            if ((folder.getType() & javax.mail.Folder.HOLDS_MESSAGES) != 0) {
                System.out.println(folder.getFullName() + ": " + folder.getMessageCount());
            }
        }
    } catch (MessagingException e) {
        e.printStackTrace();
    }
    
  2. # 2 楼答案

    您可以像这样访问其他文件夹

    store.getFolder("[Gmail]/Sent Mail");
    store.getFolder("[Gmail]/Drafts");
    

    等等

  3. # 3 楼答案

    您可以尝试以下方法:

    Folder[] folderList = store.getDefaultFolder().list("*");
    
  4. # 4 楼答案

    下面是有效的代码。这将为您提供所有标签的句柄。要深入folder,您可以执行folder.list()或使用store.getDefaultFolder().list("*")检索其他答案中建议的所有文件夹和子文件夹

    Properties props = System.getProperties();
    props.setProperty("mail.store.protocol", "imaps");
    Session session = Session.getDefaultInstance(props, null);
    Store store = session.getStore("imaps");
    store.connect("imap.gmail.com", "YOURMAILID@gmail.com", "UR_P@ZZWRD");
    System.out.println(store);
    
    Folder[] f = store.getDefaultFolder().list();
    for(Folder fd:f)
        System.out.println(">> "+fd.getName());
    

    输出:

    >> INBOX
    >> Personal
    >> Receipts
    >> Travel
    >> Work
    >> [Gmail]


    旧答案

    请注意这是不正确的,它在this answer中被dkarp正确地指出了

    这些应该可以:

    http://java.sun.com/products/javamail/javadocs/javax/mail/Store.html#getSharedNamespaces%28%29

    http://java.sun.com/products/javamail/javadocs/javax/mail/Store.html#getUserNamespaces%28java.lang.String%29

  5. # 5 楼答案

    store.getDefaultFolder().list()怎么样?不过,只是猜测而已