2011-01-25 18 views
33

का उपयोग कर मेल खाते में उपलब्ध फ़ोल्डर्स की सूची कैसे प्राप्त करें मैं अपने व्यक्तिगत खाते से कनेक्ट करने के लिए जावामेल API का उपयोग कर रहा हूं। मेरे जीमेल खाते में फ़ोल्डरों (लेबल्स) की सूची है जो मैंने + इनबॉक्स, ड्राफ्ट इत्यादि जैसे डिफ़ॉल्ट फ़ोल्डर्स बनाए हैं। मैं सभी उपलब्ध फ़ोल्डरों (डिफ़ॉल्ट और उपयोगकर्ता द्वारा बनाई गई) को कैसे सूचीबद्ध कर सकता हूं?JavaMail

मैं इस API का उपयोग कर विशेष फ़ोल्डर तक पहुंच सकता हूं: Folder inbox = store.getFolder("Inbox");। क्या मेल खाते में उपलब्ध फ़ोल्डर की सूची प्राप्त करने के लिए कोई अन्य एपीआई है?

+0

पृथ्वी पर आपने ऐसा उत्तर क्यों स्वीकार किया जिसने आपको वह परिणाम नहीं दिए जिन्हें आप ढूंढ रहे थे? – dkarp

उत्तर

26

यहां कोड है जो काम करता है। यह आपको सभी लेबलों को संभालेगा। folder में गहराई से जाने के लिए, आप folder.list() कर सकते हैं या आप अन्य उत्तरों में सुझाए गए सभी फ़ोल्डरों और उप-फ़ोल्डरों को पुनर्प्राप्त करने के लिए store.getDefaultFolder().list("*") का उपयोग कर सकते हैं।

Properties props = System.getProperties(); 
props.setProperty("mail.store.protocol", "imaps"); 
Session session = Session.getDefaultInstance(props, null); 
Store store = session.getStore("imaps"); 
store.connect("imap.gmail.com", "[email protected]", "[email protected]"); 
System.out.println(store); 

Folder[] f = store.getDefaultFolder().list(); 
for(Folder fd:f) 
    System.out.println(">> "+fd.getName()); 

आउटपुट:

> > इनबॉक्स
> > व्यक्तिगत
> > प्राप्तियां
> > सफर
> > कार्य
> > [जीमेल]


पुराने उत्तर

कृपया ध्यान दें यह सही नहीं है, यह ठीक ही द्वारा dkarp

this answer में बताया है ये करना चाहिए:

http://java.sun.com/products/javamail/javadocs/javax/mail/Store.html#getSharedNamespaces%28%29

http://java.sun.com/products/javamail/javadocs/javax/mail/Store.html#getUserNamespaces%28java.lang.String%29

+0

'फ़ोल्डर [] फ़ोल्डर्स = store.getPersonalNamespaces(); 'जब मैंने इस कोड को फ़ोल्डर्स की कोशिश की। लम्बाई हमेशा होता है 1. लेकिन मेरे जीमेल खाते में 8 फ़ोल्डर्स हैं .. इसी प्रकार यदि मैंने' फ़ोल्डर [] फ़ोल्डर्स = store.getSharedNamespaces(); 'लंबाई हमेशा शून्य होती है। – Jagadesh

+0

यह उत्तर बस गलत है। यह कोड JavaMail को [NAMESPACE' कमांड] जारी करने का कारण बनता है (http://tools.ietf.org/html/rfc2342#section-5), जो प्रमाणीकृत उपयोगकर्ता के फ़ोल्डर्स, अन्य उपयोगकर्ताओं के फ़ोल्डरों के लिए उपसर्गों की खोज में सहायता करता है, और साझा फ़ोल्डर। लेकिन यह निश्चित रूप से एक फ़ोल्डर लिस्टिंग नहीं करता है। – dkarp

+1

आपके द्वारा शामिल किया गया कोड आपके द्वारा सूचीबद्ध आउटपुट नहीं देता है। आपको 'सूची') में स्पष्ट '" * "' की आवश्यकता है, अन्यथा यह केवल 'INBOX' और गैर-चयन योग्य' [जीमेल] 'वापस कर देगा। – dkarp

0

कैसे store.getDefaultFolder().list() के बारे में? बस एक अनुमान है, यद्यपि।

+0

यह आदेश जीमेल के लिए काम करता है, लेकिन उदाहरण के लिए याहू के लिए नहीं –

53

सर्गेई करीब है, लेकिन डिफ़ॉल्ट रूप से जावामेल का list()LIST "" % करता है, जो आपको केवल शीर्ष-स्तरीय फ़ोल्डर्स देता है। जीमेल अपने सिस्टम फ़ोल्डर (सभी मेल, ड्राफ्ट्स, प्रेषित मेल, स्पैम, तारांकित, और ट्रैश) को गैर-चयन योग्य फ़ोल्डर [Gmail] के तहत रखता है, इसलिए आपको वास्तव में LIST "" * करने की आवश्यकता है। अन्यथा, आप बस , [Gmail], और अपने लेबल वापस प्राप्त करेंगे।

यहाँ, कुछ नमूना कोड जीमेल से कनेक्ट होता है फ़ोल्डर सूची को हासिल करेगा, और (अर्थात जो कि सिर्फ पदानुक्रम प्लेसहोल्डर नहीं हैं [Gmail] की तरह) प्रत्येक गैर \NoSelect फ़ोल्डर के लिए नाम और संदेश गिनती बाहर प्रिंट:

Properties props = System.getProperties(); 
props.setProperty("mail.store.protocol", "imaps"); 
try { 
    Session session = Session.getDefaultInstance(props, null); 
    javax.mail.Store store = session.getStore("imaps"); 
    store.connect("imap.gmail.com", "<username>@gmail.com", "<password>"); 
    javax.mail.Folder[] folders = store.getDefaultFolder().list("*"); 
    for (javax.mail.Folder folder : folders) { 
     if ((folder.getType() & javax.mail.Folder.HOLDS_MESSAGES) != 0) { 
      System.out.println(folder.getFullName() + ": " + folder.getMessageCount()); 
     } 
    } 
} catch (MessagingException e) { 
    e.printStackTrace(); 
} 
+0

+1 हाँ, आप सही हैं। मुझे सही करने के लिए धन्यवाद। वास्तव में मदद करने के लिए – Nishant

7

आप इस

store.getFolder("[Gmail]/Sent Mail"); 
store.getFolder("[Gmail]/Drafts"); 

आदि जैसे अन्य फ़ोल्डर तक पहुँच सकते हैं

+0

धन्यवाद – user606669

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

  • कोई संबंधित समस्या नहीं^_^