سؤال

وأنا أكتب / تعلم لجلب البريد الإلكتروني باستخدام جافا من مجلد IMAP باستخدام javax.mail الحزمة. كنت بنجاح قادرا على استرداد رسائل ن مشاركة في مجلد، ولكن أنا أتطلع لبناء مثالا لاسترداد الرسائل منذ تاريخ محدد. أي أمثلة؟

هل كانت مفيدة؟

المحلول

ويمكنك أيضا استخدام الطبقات SEARCHTERM في حزمة البريد جافا.

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

ويجب أن يثبت بعض مزيج من فوق إلى أن يكون أفضل طريقة للحصول على مواعيد داخل نطاق معين.

نصائح أخرى

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

وبدلا من جلب كل الرسائل يجب أن تحاول الاستفادة من البحث من جانب الخادم. هذا يعمل باستخدام بحث طريقة <م> javax.mail.Folder . من المحتمل أن يكون لديك لكتابة SEARCHTERM الخاصة بك على أساس المعايير على Message.getReceivedDate ().

وإذا لم يعمل بحث جانب الخادم، هل يمكن أن حاول استخدام جلب الشخصي، أي بدلا من inbox.getMessages () استخدام inbox.fetch (رسالة [] رسائل و، FetchProfile FP). وجافادوك لجلب يقول: <م> عملاء استخدام هذا الأسلوب لتشير إلى أن هناك حاجة إلى العناصر المحددة اون الجماعية لمجموعة رسالة معينة. ومن المتوقع أن استرداد هذه العناصر لمجموعة رسالة معينة بطريقة فعالة التنفيذ. لاحظ أن هذا الأسلوب هو مجرد تلميح لتنفيذ الجلب المسبق البنود المطلوبة.

وهنا هو ما خطرت لي. يعمل هذا بالنسبة لي، ولكن ربما لا يكون أفضل طريقة للذهاب حول هذا الموضوع. أي اقتراحات لتحسين هذا؟

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

وعلى جميع رسائل في الشهر الماضي:

    Calendar cal = Calendar.getInstance();
    cal.roll(Calendar.MONTH, false);
    Message[] search = folder.search(new ReceivedDateTerm(ComparisonTerm.GT, cal.getTime()));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top