Cómo obtener la lista de carpetas disponibles en una cuenta de correo usando JavaMail


Estoy usando JavaMail API para conectarme a mi cuenta personal. Tengo una lista de carpetas (etiquetas)en mi cuenta de Gmail que creé + las carpetas predeterminadas como Bandeja de entrada, Borradores, etc. ¿Cómo puedo listar todas las carpetas disponibles (la predeterminada y el usuario creado)?

Puedo acceder a la carpeta en particular usando esta API: Folder inbox = store.getFolder("Inbox");. ¿Hay alguna otra API para obtener la lista de carpetas disponibles en una cuenta de correo?

Author: bluish, 2011-01-25

4 answers

Aquí está el código que funciona. Esto le dará la manija a todas las etiquetas. Para profundizar en un folder, puede realizar folder.list() o puede usar store.getDefaultFolder().list("*") para recuperar todas las carpetas y subcarpetas como se sugiere en la otra respuesta.

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", "[email protected]", "UR_P@ZZWRD");
System.out.println(store);

Folder[] f = store.getDefaultFolder().list();
for(Folder fd:f)
    System.out.println(">> "+fd.getName());

Salida:

>> BANDEJA DE ENTRADA
> > Personal
>> Recibos
> > Viajes
>> Trabajo
> > [Gmail]


RESPUESTA ANTERIOR

Tenga en cuenta que esto no es correcto, está correctamente señalado en esta respuesta por dkarp

Estos deben hacer:

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

 30
Author: Nishant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:10:10

Sergey está cerca, pero por defecto JavaMail de list() hace un LIST "" %, que le da sólo carpetas de nivel superior. GMail pone sus carpetas del sistema (Todo el correo, Borradores, Correo Enviado, Spam, Starred y Papelera) en la carpeta no seleccionable [Gmail], por lo que realmente necesita hacer un LIST "" * en su lugar. De lo contrario, volverásINBOX, [Gmail], y sus etiquetas.

Aquí hay un código de ejemplo que se conecta a GMail, obtiene la lista de carpetas e imprime el nombre y el número de mensajes para cada carpeta que no es \NoSelect (es decir, los que no son solo marcadores de posición de jerarquía, como [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();
}
 58
Author: dkarp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-06 07:57:30

Puedes acceder a otras carpetas como esta

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

Etc.

 7
Author: user889386,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-05 19:00:37

¿Qué tal store.getDefaultFolder().list()? Sólo una suposición, sin embargo.

 0
Author: Sergei Tachenov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-06 07:56:04