web-dev-qa-db-fra.com

Accéder aux courriels de gmail en utilisant IMAP (API javamail)

J'essaie d'accéder aux courriels des comptes Gmail via IMAP avec l'aide de l'API JavaMail. Je me demandais pourquoi le code fonctionne pour un compte de messagerie mais ne fonctionne pas pour un autre. 

Je peux accéder au dossier Inbox des deux comptes de messagerie. Mais pour l'un des comptes de messagerie, il n'est pas possible d'accéder à d'autres dossiers tels que SPAM([Gmail]/Spam) et une exception FolderNotFoundException est renvoyée. Quelqu'un pourrait-il s'il vous plaît expliquer ce qui ne va pas? 

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

    }



}
23
Ragini

L'un des comptes utilise-t-il une interface utilisateur non anglaise par hasard?

Les noms de dossiers Gmail sont localisés en fonction des paramètres de localisation de l'utilisateur.

Actuellement, le seul moyen d'obtenir le nom du dossier localisé consiste à utiliser la commande XLIST.

13
Pawel Lesnikowski
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();
  }
 }

}
6
Vicky

Je ne suis pas sûr que cela aide, mais j'ai déjà vu des cas où les comptes Gmail ont des boîtes aux lettres différentes, par exemple ..

Compte 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]

Compte Gmail 2: -

[[Gmail]]
[[Gmail]/All Mail]
[[Gmail]/Bin]
[[Gmail]/Drafts]
[[Gmail]/Important]
[[Gmail]/Sent Mail]
[[Gmail]/Spam]
[[Gmail]/Starred]
0
rams59

liste privée 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;
    }
0
Arbaz Shaikh