leer - javamail netbeans
Acceso a correos electrónicos desde gmail utilizando IMAP(API de javamail) (4)
Estoy intentando acceder a los correos electrónicos de las cuentas de Gmail a través de IMAP con la ayuda de la API de JavaMail. Me preguntaba por qué el código funciona para una cuenta de correo electrónico pero no funciona para otra.
Puedo acceder a la carpeta Inbox
de Inbox
de ambas cuentas de correo electrónico. Pero para una de las cuentas de correo electrónico, no se puede acceder a otras carpetas como SPAM([Gmail]/Spam)
y se FolderNotFoundException
una excepción de FolderNotFoundException
. ¿Alguien podría explicar qué está mal?
Gracias de antemano.
Aquí está el código:
import java.io.*;
import java.util.*;
import javax.mail.*;
import javax.mail.Flags.Flag;
import javax.mail.internet.*;
import com.sun.mail.imap.IMAPFolder;
import com.sun.mail.imap.IMAPMessage;
public class FolderFetchIMAP {
public static void main(String[] args) throws MessagingException, IOException {
IMAPFolder folder = null;
Store store = null;
String subject = null;
Flag flag = null;
try
{
Properties props = System.getProperties();
props.setProperty("mail.store.protocol", "imaps");
Session session = Session.getDefaultInstance(props, null);
store = session.getStore("imaps");
store.connect("imap.googlemail.com","[email protected]", "password");
folder = (IMAPFolder) store.getFolder("[Gmail]/Spam"); // This doesn''t work for other email account
//folder = (IMAPFolder) store.getFolder("inbox"); This works for both email account
if(!folder.isOpen())
folder.open(Folder.READ_WRITE);
Message[] messages = folder.getMessages();
System.out.println("No of Messages : " + folder.getMessageCount());
System.out.println("No of Unread Messages : " + folder.getUnreadMessageCount());
System.out.println(messages.length);
for (int i=0; i < messages.length;i++)
{
System.out.println("*****************************************************************************");
System.out.println("MESSAGE " + (i + 1) + ":");
Message msg = messages[i];
//System.out.println(msg.getMessageNumber());
//Object String;
//System.out.println(folder.getUID(msg)
subject = msg.getSubject();
System.out.println("Subject: " + subject);
System.out.println("From: " + msg.getFrom()[0]);
System.out.println("To: "+msg.getAllRecipients()[0]);
System.out.println("Date: "+msg.getReceivedDate());
System.out.println("Size: "+msg.getSize());
System.out.println(msg.getFlags());
System.out.println("Body: /n"+ msg.getContent());
System.out.println(msg.getContentType());
}
}
finally
{
if (folder != null && folder.isOpen()) { folder.close(true); }
if (store != null) { store.close(); }
}
}
}
¿Alguna de las cuentas usa una interfaz de usuario que no esté en inglés?
Los nombres de las carpetas de Gmail están localizados con respecto a la configuración de localización del usuario.
Actualmente, la única forma de obtener el nombre de la carpeta localizada es mediante el comando XLIST.
Lista privada getResulr1 () {
try {
Properties props = new Properties();
props.put("mail.store.protocol","imaps");
Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore("imaps");
store.connect("imap.gmail.com", "Email Id", "App Password");
Folder inbox = store.getFolder("inbox");
//if you want mail from specify floder just change change floder name
//Folder inbox = store.getFolder("[Gmail]/Drafts");
inbox.open(Folder.READ_ONLY);
int messageCount = inbox.getMessageCount();
Log.e("getFloder ", "getResulr1: "+store.getDefaultFolder().list("*") );
javax.mail.Folder[] folders = store.getDefaultFolder().list("*");
for (javax.mail.Folder folder : folders) {
if ((folder.getType() & javax.mail.Folder.HOLDS_MESSAGES) != 0){
Log.e("getFloder ", "getResulr1: "+folder.getName() );
}
}
Log.e("Mail Subject:", "Total Messages:-: "+messageCount );
javax.mail.Message[] messages = inbox.getMessages();
System.out.println("------------------------------");
Log.e("Mail Subject:", "messages: "+messages.toString());
for (int i = 0; i < messages.length; i++) {
Log.e("Mail Subject:", "getResulr1: "+messages[i].getSubject());
}
inbox.close(true);
store.close();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
No estoy seguro de si esto ayuda, pero he visto casos en los que las cuentas de gmail tienen diferentes buzones, es decir ...
Cuenta de Gmail 1: -
[[Google Mail]]
[[Google Mail]/All Mail]
[[Google Mail]/Bin]
[[Google Mail]/Drafts]
[[Google Mail]/Important]
[[Google Mail]/Sent Mail]
[[Google Mail]/Spam]
[[Google Mail]/Starred]
Cuenta de Gmail 2: -
[[Gmail]]
[[Gmail]/All Mail]
[[Gmail]/Bin]
[[Gmail]/Drafts]
[[Gmail]/Important]
[[Gmail]/Sent Mail]
[[Gmail]/Spam]
[[Gmail]/Starred]
package com.technicalkeeda;
import java.io.File;
import java.io.FileInputStream;
import java.util.Properties;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Store;
public class GmailInbox {
public static void main(String[] args) {
GmailInbox gmail = new GmailInbox();
gmail.read();
}
public void read() {
Properties props = new Properties();
try {
props.load(new FileInputStream(new File("C://smtp.properties")));
Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore("imaps");
store.connect("smtp.gmail.com", "*************@gmail.com","your_password");
Folder inbox = store.getFolder("inbox");
inbox.open(Folder.READ_ONLY);
int messageCount = inbox.getMessageCount();
System.out.println("Total Messages:- " + messageCount);
Message[] messages = inbox.getMessages();
System.out.println("------------------------------");
for (int i = 0; i < 10; i++) {
System.out.println("Mail Subject:- " + messages[i].getSubject());
}
inbox.close(true);
store.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}