2012-02-05 35 views
14

Tôi đang viết kịch bản để phân tích hộp thư của mình và muốn kiểm tra thư mới định kỳ. Tiêu chí tìm kiếm sẽ là: cung cấp cho tôi UID cho tất cả email có UID lớn hơn X, trong đó X là UID của email cuối cùng tôi đã xử lý.IMAP: Tìm kiếm thư có UID lớn hơn X (hoặc thường, sau lần tìm kiếm cuối cùng của tôi)

Hoặc nói chung, tôi đang tìm cách chỉ xem thư từ lần tìm kiếm cuối cùng của tôi.

Lưu ý rằng tôi không tìm kiếm thư đã xem/không nhìn thấy; tập lệnh mở hộp thư dưới dạng chỉ đọc và tôi muốn nó không can thiệp vào cờ của tôi, v.v.

Tôi biết tôi có thể chỉ định ngày trong tìm kiếm IMAP, nhưng mức độ chi tiết của nó dường như bằng ngày, vì vậy không chính xác những gì tôi cần.

Tôi bắt đầu với Gmail làm máy chủ IMAP, nhưng muốn hỗ trợ các máy chủ IMAP chung trong tương lai.

Có cách nào để tìm kiếm email có UID lớn hơn X không? Hoặc một phương tiện khác để xác định tất cả các tin nhắn từ tin nhắn X?

Trả lời

16

Bạn có thể sử dụng TÌM KIẾM IMAP cho UID. Giả sử UID gần đây vời nhất của bạn là năm 1999, tôi nghĩ rằng bạn sẽ làm gì:

SEARCH UID 2000:*

+0

Xác nhận trên Courier-IMAP – Joril

+1

nên được chấp nhận câu trả lời. Cũng không chắc tôi hiểu rõ RFC: chúng tôi chắc chắn 100% rằng một UID nhất định sẽ không bao giờ được sử dụng lại theo thời gian? (xóa email, v.v.) – lajarre

+1

@ lajarre đó không phải là điều tôi hiểu đủ để trả lời đầy đủ. Nếu bạn hỏi đó là một câu hỏi riêng biệt trên StackOverflow, bạn có thể nhận được câu trả lời tốt hơn. Theo RFC 3501 mục 2.3.1.1, UID "KHÔNG PHẢI thay đổi trong phiên, và KHÔNG thay đổi giữa các phiên" và thay đổi thành UID "PHẢI được phát hiện bằng cách sử dụng cơ chế UIDVALIDITY" – SimonMayer

1

Tại sao không sử dụng IMAP IDLE cho việc này?

với IMAP IDLE, máy chủ cảnh báo bạn mỗi khi một tin nhắn mới đến

+0

vì không được hỗ trợ rộng rãi. và bạn phải duy trì kết nối? – benchpresser

+0

@ benchpresser cách để resurect một thread cũ :) - anyway nó đúng tất cả các bạn nói nhưng đến 1 điểm tôi nói "đó là lý do tại sao tôi ASKED nếu có một lý do không sử dụng trên trường hợp cụ thể của OP", và như cho thứ hai, nếu bạn không kết nối, bạn không thể tìm kiếm hộp thư – 537mfb

+0

Nhưng nếu bạn đã kết nối ngày hôm qua và kết nối lại hôm nay, bạn đã được kết nối và bạn lại, nhưng không thể sử dụng IDLE. Ngoài ra, nếu ứng dụng của bạn cần phải mạnh mẽ chống lại gián đoạn mạng gián đoạn, bạn cần phải theo dõi phía khách hàng. Vì vậy, có, nếu bạn có thể hỗ trợ IDLE, hãy hỗ trợ IDLE nếu nó có ý nghĩa với bạn, nhưng điều này không giải quyết được vấn đề trong trường hợp chung; và thường thì bạn cần hỗ trợ trường hợp chung ngay cả khi bạn cũng muốn sử dụng IDLE khi có thể. – tripleee

Các vấn đề liên quan