Tôi đang viết/học cách tìm nạp email bằng java từ thư mục IMAP bằng gói javax.mail. Tôi đã có thể truy xuất thành công các thư n cuối cùng trong một Thư mục, tuy nhiên tôi đang tìm cách xây dựng một ví dụ để truy xuất thư từ một ngày cụ thể. Bất kỳ ví dụ nào?java imap tìm nạp thư kể từ ngày
Trả lời
Bạn cũng có thể sử dụng các lớp SearchTerm trong gói thư java.
SearchTerm olderThan = new ReceivedDateTerm(ComparisonTerm.LT, someFutureDate);
SearchTerm newerThan = new ReceivedDateTerm(ComparisonTerm.GT, somePastDate);
SearchTerm andTerm = new AndTerm(olderThan, newerThan);
inbox.search(andTerm);
Một số kết hợp ở trên phải chứng minh là cách tốt hơn để có được ngày trong một phạm vi nhất định.
Tôi đang cố gắng sử dụng receiveDateTerm nhưng có vẻ như nó không trả lại cho tôi kết quả chính xác. Tôi chỉ muốn lấy tất cả các thư nhận được trong 1 phút cuối cùng hoặc tất cả các thư nhận được từ thời gian thử nghiệm của tôi bắt đầu. Nó không hoạt động như mong đợi .. đây là những gì tôi đang làm. 'SearchTerm st = new AndTerm (new SubjectTerm (subjectSearchPhrase), new BodyTerm (bodySearchPhrases)); st = new AndTerm (st, new ReceivedDateTerm (CompareTerm.GE, searchMailReceivedDateGE)); 'Tôi cũng đã thử sử dụng' YoungerTerm (80) 'và điều này cũng không hoạt động. ai biết được vấn đề? cảm ơn! – OverrockSTAR
Một điều cần lưu ý: IMAP chỉ có thể tìm kiếm theo thời gian, không phải thời gian, vì vậy nếu bạn muốn nhận tất cả thư mới kể từ lần cập nhật cuối cùng, họ sẽ cần đặt thời gian của ngày so sánh của họ trở lại nửa đêm và kiểm tra thêm trùng lặp trên máy khách. – Tobl
Đây là những gì tôi nghĩ ra. Điều này làm việc cho tôi, nhưng có lẽ không phải là cách tốt nhất để đi về nó. Bất kỳ đề xuất để cải thiện điều này?
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());
}
}
Chắc chắn không phải là một cách tiếp cận tốt vì nó tìm nạp các email đầu tiên mà không lọc chúng với khả năng IMAP. Tôi tin rằng sự gia tăng gấp mười lần không làm cho nó đẹp hơn nhiều (tưởng tượng 10k email trong hộp) – Konstantin
Thay vì tìm nạp tất cả thư bạn nên thử tận dụng tìm kiếm phía máy chủ. Tính năng này hoạt động bằng cách sử dụng phương thức tìm kiếm của javax.mail.Folder. Bạn có thể sẽ phải viết SearchTerm của riêng bạn dựa trên một tiêu chí trên Message.getReceivedDate().
Nếu tìm kiếm phía máy chủ không hoạt động, bạn có thể thử sử dụng hồ sơ tìm nạp, tức là thay vì inbox.getMessages() sử dụng inbox.fetch (Message [] msgs, FetchProfile fp). javadoc cho tìm nạp nói: Khách hàng sử dụng phương pháp này để cho biết rằng các mục được chỉ định là cần thiết cho toàn bộ dải tin nhắn đã cho. Việc triển khai dự kiến sẽ truy xuất các mục này cho phạm vi tin nhắn đã cho một cách hiệu quả. Lưu ý rằng phương pháp này chỉ là một gợi ý cho việc triển khai để tìm nạp trước các mục mong muốn.
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);
}
}
Tất cả các mail trong tháng vừa qua:
Calendar cal = Calendar.getInstance();
cal.roll(Calendar.MONTH, false);
Message[] search = folder.search(new ReceivedDateTerm(ComparisonTerm.GT, cal.getTime()));
- 1. Github API v3: tìm nạp các sự kiện kể từ ngày đến ngày
- 2. Số ngày Joda kể từ ngày Epoch
- 3. Chỉ nhận thư mới từ máy chủ IMAP
- 4. Tìm ngày bằng cách trừ số X ngày kể từ ngày cụ thể trong Javascript
- 5. lưu trữ ngày và ngày hiện tại 1 năm kể từ hiện tại trong java
- 6. php được microtime kể từ ngày chuỗi
- 7. Solr tìm nạp phạm vi ngày
- 8. Thư viện cho IMAP IDLE
- 9. Ngày giờ 25 năm kể từ ngày hôm nay
- 10. Cách tìm nạp HTML trong Java
- 11. Python - Làm cách nào để tìm nạp email qua POP hoặc IMAP thông qua proxy?
- 12. javamail: Đặt cờ tùy chỉnh trên thư imap và tìm kiếm thư có cờ tùy chỉnh
- 13. Đồng bộ hóa IMAP
- 14. Rails ActiveRecord - cách tìm nạp bản ghi giữa hai ngày
- 15. Cách tìm nạp Subversion bên ngoài mà không tìm nạp tất cả thư mục và thư mục con khác
- 16. Cross Platform Thư viện IMAP C++
- 17. Số học ngày trong Java, thêm 3 tháng kể từ hôm nay
- 18. Thư viện PHP để yêu cầu email từ IMAP
- 19. Hudson sẽ không tìm nạp từ Git
- 20. Cách nhận năm và tháng kể từ ngày - PHP
- 21. có được một ngày 6 năm kể từ bây giờ?
- 22. utc giây kể từ nửa đêm đến ngày giờ
- 23. Máy chủ SQL: tìm nạp bản ghi giữa hai ngày?
- 24. Không thể tìm thấy hoặc nạp lớp Swing chính Java
- 25. Làm cách nào để giải mã chủ đề được tìm nạp qua Net :: IMAP trong UTF8? (ruby)
- 26. Trình tìm nạp SQL
- 27. Tìm nạp địa chỉ từ bảng "canonical_addresses"
- 28. Cách nhận tổng số ngày trong một năm kể từ ngày đã cho
- 29. Tìm kiếm IMAP bằng Python cho chủ đề một phần
- 30. Cách tính 8 ngày làm việc kể từ ngày hôm nay?
liên quan: http://stackoverflow.com/questions/6963256/javamail-search-by-receiveddate-doesnt-work-down-to- thứ hai – kevinarpe