2012-02-13 11 views
20

मैं जावामेल एपीआई की सहायता से आईएमएपी के माध्यम से जीमेल खातों से ईमेल तक पहुंचने का प्रयास कर रहा हूं। मैं सोच रहा था कि कोड एक ईमेल खाते के लिए क्यों काम करता है लेकिन दूसरे के लिए काम नहीं करता है।IMAP (javamail API) का उपयोग कर जीमेल से ईमेल एक्सेस करना

मैं दोनों ईमेल खातों के Inbox फ़ोल्डर तक पहुंचने में सक्षम हूं। लेकिन ईमेल खातों में से एक के लिए, SPAM([Gmail]/Spam) जैसे अन्य फ़ोल्डरों तक पहुंचा नहीं जा सकता है और यह FolderNotFoundException अपवाद फेंकता है। क्या कोई यह बता सकता है कि क्या गलत हो रहा है?

अग्रिम धन्यवाद।

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

वाह। यह काम! :-) –

+0

धन्यवाद आदमी। :-) – kukis

उत्तर

12

किसी भी संयोग से गैर अंग्रेजी UI का उपयोग खातों में से एक है:

यहाँ कोड है?

जीमेल फ़ोल्डर नाम उपयोगकर्ता स्थानीयकरण सेटिंग्स के संबंध में स्थानीयकृत हैं।

वर्तमान में स्थानीय फ़ोल्डर का नाम प्राप्त करने का एकमात्र तरीका XLIST कमांड का उपयोग कर है।

+0

@ Pawel Lesnikowski क्या आप कृपया विस्तारित कर सकते हैं XLIST कमांड क्या है और मैं स्थानीय फ़ोल्डर नाम प्राप्त करने के लिए इसका उपयोग कैसे कर सकता हूं? धन्यवाद .. – Ragini

+0

XLIST Google द्वारा IMAP प्रोटोकॉल में जोड़े गए एक्सटेंशन में से एक है। यह LIST कमांड के समान है। इसकी प्रतिक्रिया में अतिरिक्त झंडे शामिल हैं, जो क्लाइंट को फ़ोल्डर के इच्छित उद्देश्य की पहचान करने की अनुमति देते हैं। आप यहां एक नमूना प्रतिक्रिया पा सकते हैं: http://www.limilabs.com/blog/localized-gmail-imap- फ़ोल्डर्स मैं जावा देव नहीं हूं, इसलिए मैं आपको जावा का उपयोग करके इस आदेश को जारी करने का तरीका नहीं दिखा सकता। मेल –

+0

@ Pawel Lesnikowski धन्यवाद फिर से .. आपके द्वारा प्रदान किया गया लिंक बहुत उपयोगी है .. मुझे सही फ़ोल्डर्नम मिल गए हैं और वे ठीक काम करते हैं ... – Ragini

0

इम अनिश्चित इस मदद करता है, लेकिन मैं मामलों में जहां जीमेल खाते भिन्न मेलबॉक्स यानी है देखा है अगर ..

जीमेल खाता 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] 

जीमेल खाता 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

smtp.properties में क्या रखना है? – vaibhavcool20

संबंधित मुद्दे