2009-05-15 10 views
7

से संदेश प्राप्त करने के बाद मैं javax.mail पैकेज का उपयोग कर एक IMAP फ़ोल्डर से जावा का उपयोग करके ईमेल लाने के लिए लिख रहा/सीख रहा हूं। मैं फ़ोल्डर में अंतिम एन संदेशों को पुनः प्राप्त करने में सफलतापूर्वक सक्षम था, हालांकि मैं निर्दिष्ट दिनांक से संदेशों को पुनर्प्राप्त करने के लिए एक उदाहरण बनाना चाहता हूं। कोई उदाहरण?जावा इमेप संदेश

+0

संबंधित: http://stackoverflow.com/questions/6963256/javamail-search-by-receiveddate-doesnt-work-down-to- दूसरा – kevinarpe

उत्तर

22

आप जावा मेल पैकेज में सर्चटर्म कक्षाओं का भी उपयोग कर सकते हैं।

SearchTerm olderThan = new ReceivedDateTerm(ComparisonTerm.LT, someFutureDate); 
SearchTerm newerThan = new ReceivedDateTerm(ComparisonTerm.GT, somePastDate); 
SearchTerm andTerm = new AndTerm(olderThan, newerThan); 
inbox.search(andTerm); 

उपरोक्त का कुछ संयोजन एक निश्चित सीमा के भीतर तिथियां प्राप्त करने का एक बेहतर तरीका साबित होना चाहिए।

+1

मैं प्राप्तडेटार्म का उपयोग करने की कोशिश कर रहा हूं लेकिन ऐसा लगता है कि यह मुझे सही परिणाम नहीं दे रहा है। मैं बस पिछले 1 मिनट में प्राप्त सभी मेल या मेरे परीक्षण शुरू होने के समय से प्राप्त सभी मेल पुनर्प्राप्त करना चाहता हूं। यह उम्मीद के अनुसार काम नहीं कर रहा है .. यही वह है जो मैं कर रहा हूं। 'सर्चटर्म सेंट = नया एंडटर्म (नया विषय टर्म (विषय खोजफ्रेज़), नया बॉडीटर्म (बॉडीशर्चफ्रेज़)); st = new andTerm (सेंट, नया प्राप्त किया गयाडेटार्म (ComparisonTerm.GE, searchMailReceivedDateGE)); 'मैंने' YoungerTerm (80) 'का उपयोग करने का भी प्रयास किया है और यह भी काम नहीं करता है। कोई भी समस्या जानता है? धन्यवाद! – OverrockSTAR

+0

ध्यान देने योग्य एक बात: IMAP केवल समय के साथ खोज सकता है, समय नहीं, इसलिए यदि कोई अंतिम अपडेट के बाद से सभी नए मेल प्राप्त करना चाहता है, तो उन्हें अपनी तुलना तिथि का समय मध्यरात्रि में सेट करना होगा और आगे की जांच करना होगा ग्राहक पर डुप्लिकेट। – Tobl

0

यहां मैं क्या आया हूं। यह मेरे लिए काम करता है, लेकिन शायद इसके बारे में जाने का सबसे अच्छा तरीका नहीं है। इसे सुधारने के लिए कोई सुझाव?

 Date from; //assume initialized 
     Store store; //assume initialized 
     Folder inbox = store.getFolder("INBOX"); 
     inbox.open(Folder.READ_ONLY); 
     int end = inbox.getMessageCount(); 
     long lFrom = from.getTime(); 
     Date rDate; 
     long lrDate; 
     int start = end; 
     do { 
     start = start - 10; 
     Message testMsg = inbox.getMessage(start); 
     rDate = testMsg.getReceivedDate(); 
     lrDate = rDate.getTime(); 
     } while (lrDate > lFrom); 
     Message msg[] = inbox.getMessages(start, end); 
     for (int i=0, n=msg.length; i<n; i++) { 
     lrDate = msg[i].getReceivedDate().getTime(); 
     if (lrDate > lFrom) { 
      System.out.println(i + ": " 
      + msg[i].getFrom()[0] 
      + "\t" + msg[i].getSubject()); 
     } 
     } 
+2

निश्चित रूप से एक अच्छा दृष्टिकोण नहीं है क्योंकि यह आईएमएपी क्षमताओं के साथ फ़िल्टर किए बिना पहले ईमेल प्राप्त करता है। मेरा मानना ​​है कि दस गुना वृद्धि यह बहुत अच्छी नहीं है (बॉक्स में 10k ईमेल की कल्पना करें) – Konstantin

2

सभी संदेशों को लाने के बजाय आपको सर्वर साइड सर्च का लाभ उठाने का प्रयास करना चाहिए। यह खोजjavax.mail.Folder की विधि का उपयोग कर काम करता है। आपको Message.getReceivedDate() पर मानदंडों के आधार पर शायद अपना खुद का सर्चटर्म लिखना होगा।

यदि सर्वर साइड सर्च काम नहीं करती है, तो आप fetbox प्रोफाइल का उपयोग करने का प्रयास कर सकते हैं, यानी inbox.getMessages() का उपयोग inbox.fetch (संदेश [] msgs, FetchProfile fp)। fetch के लिए javadoc कहता है: ग्राहक इस विधि का उपयोग यह इंगित करने के लिए करते हैं कि दिए गए संदेश सीमा के लिए निर्दिष्ट आइटमों की आवश्यकता होती है। कार्यान्वयन से इन मदों को दिए गए संदेश सीमा के लिए कुशल तरीके से पुनर्प्राप्त करने की उम्मीद है। ध्यान दें कि यह विधि वांछित वस्तुओं को प्रीफेच करने के लिए कार्यान्वयन के लिए सिर्फ एक संकेत है।

5
public class CheckDate { 
    public void myCheckDate(Date givenDate) { 
     SearchTerm st = new ReceivedDateTerm(ComparisonTerm.EQ,givenDate); 

     Message[] messages = inbox.search(st); 
    } 

    // in main method 

    public static void main(String[] args) throws ParseException{ 
     SimpleDateFormat df1 = new SimpleDateFormat("MM/dd/yy"); 
     String dt="06/23/10"; 
     java.util.Date dDate = df1.parse(dt); 
     cd.myCheckDate(dDate); 
    } 
} 
0

पिछले महीने में सभी मेल:

Calendar cal = Calendar.getInstance(); 
    cal.roll(Calendar.MONTH, false); 
    Message[] search = folder.search(new ReceivedDateTerm(ComparisonTerm.GT, cal.getTime())); 
संबंधित मुद्दे