ti-enxame.com

Acessando e-mails do Gmail usando IMAP (javamail API)

Estou tentando acessar e-mails de contas do Gmail por meio do IMAP com a ajuda da API JavaMail. Eu estava me perguntando por que o código funciona para uma conta de e-mail, mas não funciona para outra. 

Eu posso acessar a pasta Inbox de ambas as contas de email. Mas para uma das contas de e-mail, outras pastas como SPAM([Gmail]/Spam) não podem ser acessadas e gera uma exceção FolderNotFoundException. Alguém poderia, por favor, explicar o que está errado? 

Agradeço antecipadamente.

Aqui está o 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(); }
        }

    }



}
23
Ragini

É uma das contas que usa a interface do usuário não inglesa por acaso?

Os nomes das pastas do Gmail estão localizados em relação às configurações de localização do usuário.

Atualmente, a única maneira de obter o nome da pasta localizada é usando o comando 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

Não tenho certeza se isso ajuda, mas eu já vi casos em que as contas do Gmail têm diferentes caixas de correio, ou seja,.

Conta do 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]

Conta do Gmail 2: -

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

lista particular 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