Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用JavaMail获取邮件帐户中可用文件夹的列表_Java_Gmail_Imap_Jakarta Mail - Fatal编程技术网

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

如何使用JavaMail获取邮件帐户中可用文件夹的列表,java,gmail,imap,jakarta-mail,Java,Gmail,Imap,Jakarta Mail,我正在使用JavaMail API连接到我的个人帐户。我的Gmail帐户中有我创建的文件夹(标签)列表+收件箱、草稿等默认文件夹。如何列出所有可用文件夹(默认文件夹和用户创建的文件夹) 我可以使用此API访问特定文件夹:folderinbox=store.getFolder(“inbox”)。是否有其他API来获取邮件帐户中可用的文件夹列表?以下是有效的代码。这将为您提供所有标签的句柄。要深入查看文件夹,您可以执行folder.list(),也可以使用store.getDefaultFolder

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


我可以使用此API访问特定文件夹:
folderinbox=store.getFolder(“inbox”)。是否有其他API来获取邮件帐户中可用的文件夹列表?

以下是有效的代码。这将为您提供所有标签的句柄。要深入查看
文件夹
,您可以执行
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());
输出:

>>收件箱
>>个人的
>>收据
>>旅行
>>工作
>>[Gmail]


旧答案

请注意,这是不正确的,它正确地指出了

这些措施应做到:


存储.getDefaultFolder().list()怎么样?不过,这只是一个猜测。

Sergey很接近,但默认情况下,JavaMail的
list()
提供了一个
list”“%
,它只提供顶级文件夹。GMail将其系统文件夹(所有邮件、草稿、已发送邮件、垃圾邮件、星号和垃圾)放在不可选择的文件夹下
[GMail]
,因此您确实需要做一个
列表“*
。否则,您只需返回收件箱、Gmail和标签即可

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

Properties-props=System.getProperties();
props.setProperty(“mail.store.protocol”、“imaps”);
试一试{
Session Session=Session.getDefaultInstance(props,null);
javax.mail.Store Store=session.getStore(“imaps”);
store.connect(imap.gmail.com、@gmail.com、“”);
javax.mail.Folder[]folders=store.getDefaultFolder().list(“*”);
for(javax.mail.Folder文件夹:文件夹){
if((folder.getType()&javax.mail.folder.HOLDS_邮件)!=0){
System.out.println(folder.getFullName()+“:“+folder.getMessageCount());
}
}
}捕获(消息异常e){
e、 printStackTrace();
}

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

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

您可以尝试以下方法:

Folder[] folderList = store.getDefaultFolder().list("*");

Folder[]folders=store.getPersonalNamespaces()当我尝试此代码时,folders.length始终为1。但是我的gmail帐户里有8个文件夹。。类似地,如果我尝试使用
Folder[]folders=store.getSharedNamespaces()长度始终为零。这个答案完全错误。此代码导致发出JavaMail,这有助于发现经过身份验证的用户文件夹、其他用户文件夹和共享文件夹的前缀。但它肯定不会列出文件夹列表。您包含的代码不会给出您列出的输出。您需要在
列表()
中显式显示
“*”
,否则它将只返回
收件箱
,而不可选择的
[Gmail]
@dkarp,我看到了带有代码的输出。我只是运行代码并粘贴输出,没有使用任何“”。如果我没有使用“”我得到了我所有的标签,我刚刚创建了一个新标签,我可以看到它在没有()的情况下出现。这:>>费用>>收件箱>>个人>>收据>>旅行>>工作>>[Gmail]。然而,在“”中,我看到了所有标签+草稿、已发送邮件以及所有邮件。它没有显示“收件箱”的子文件夹。我有一个包含“mail1”、“mail2”的收件箱。我用你的代码来获取文件夹列表,但它只显示收件箱,而不显示其子文件夹。你究竟为什么接受一个没有给出你想要的结果的答案?
Folder[] folderList = store.getDefaultFolder().list("*");