Accéder aux e-mails de gmail en utilisant IMAP ( API javamail)
Je suis en train d'accéder aux e-mails de Gmail comptes IMAP avec l'aide de l'API JavaMail. Je me demandais pourquoi le code fonctionne pour un compte e-mail, mais ne fonctionne pas pour l'autre.
Je suis en mesure d'accéder à la Inbox
dossier de deux comptes de messagerie. Mais pour l'un des comptes de messagerie, d'autres dossiers comme SPAM([Gmail]/Spam)
ne sont pas en mesure d'accéder et de il jette à un FolderNotFoundException
exception. Quelqu'un pourrait-il expliquer ce qui ne va pas?
Vous en remercie d'avance.
Voici le code:
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(); }
}
}
}
- Wow. Cela fonctionne! 🙂
Vous devez vous connecter pour publier un commentaire.
Est l'un des comptes à l'aide de la non-anglais de l'INTERFACE utilisateur, par hasard?
Gmail noms de dossier sont localisés par rapport à l'utilisateur des paramètres de localisation.
Actuellement le seul moyen d'obtenir le nom du dossier localisés en utilisant XLIST commande.
stmp.properties
fichier. De toute façon, leresources
dossier est un bon endroit pour stocker*.properties
fichiers.Im pas sûr si cela aide, mais j'ai vu des cas où les comptes gmail ont différentes boîtes aux lettres ie..
Compte Gmail 1 :-
Compte Gmail 2 :-
Vous pouvez essayer le code suivant: