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?
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
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();
}
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.
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.
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