2012-02-13 12 views
20

Sto tentando di accedere alle e-mail dagli account Gmail tramite IMAP con l'aiuto dell'API JavaMail. Mi stavo chiedendo perché il codice funzioni per un account di posta elettronica ma non funziona per un altro.Accesso alle e-mail da gmail tramite IMAP (javamail API)

sono in grado di accedere alla cartella Inbox di entrambi gli account di posta elettronica. Ma per uno degli account di posta elettronica non è possibile accedere ad altre cartelle come SPAM([Gmail]/Spam) e genera un'eccezione FolderNotFoundException. Qualcuno potrebbe spiegare cosa sta andando storto?

Grazie in anticipo.

Ecco il codice:

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

    } 



} 
+0

Wow. Funziona! :-) –

+0

Grazie amico. :-) – kukis

risposta

12

è uno dei conti che utilizzano non-inglese UI per caso?

I nomi delle cartelle Gmail sono localizzati rispetto alle impostazioni di localizzazione dell'utente.

Attualmente l'unico modo per ottenere il nome della cartella localizzata è utilizzare il comando XLIST.

+0

@ Pawel Lesnikowski Potresti elaborare il comando XLIST e come posso usarlo per ottenere il nome della cartella localizzata? Grazie .. – Ragini

+0

XLIST è una delle estensioni aggiunte al protocollo IMAP di Google. È molto simile al comando LIST. La sua risposta include ulteriori flag, che consentono al client di identificare lo scopo previsto della cartella. Puoi trovare una risposta esemplificativa qui: http://www.limilabs.com/blog/localized-gmail-imap-folders Non sono uno sviluppatore Java, quindi non posso mostrarti come emettere questo comando usando java. mail –

+0

@ Pawel Lesnikowski Grazie ancora..Il link fornito è relly molto utile..Io ho i nomi dei nomi corretti e funzionano bene ... – Ragini

0

Im sicuri se questo aiuta, ma ho visto casi in cui gli account Gmail hanno diverse cassette postali cioè ..

account Gmail 1: -

account
[[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] 

Gmail 2: -

[[Gmail]] 
[[Gmail]/All Mail] 
[[Gmail]/Bin] 
[[Gmail]/Drafts] 
[[Gmail]/Important] 
[[Gmail]/Sent Mail] 
[[Gmail]/Spam] 
[[Gmail]/Starred] 
5
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(); 
    } 
} 

} 
+0

cosa mettere in smtp.properties? – vaibhavcool20