2009-09-23 79 views
29

Tôi nhận được email từ máy chủ bằng giao thức IMAP như được mô tả here. Điều này hoạt động rất tốt và tôi có thể lưu trữ email và tệp đính kèm trên đĩa.Xóa email trên máy chủ bằng cách sử dụng javax.mail

Câu hỏi: Tôi có khả năng để xóa các tập tin từ máy chủ, do đó họ không còn có sẵn, khi một khách hàng cố gắng để nhận được tất cả các email? Nếu có, xin vui lòng cho tôi biết làm thế nào.

Trả lời

58

Bạn sẽ có thể thực hiện việc này thông qua API chuẩn.

Trước tiên, bạn cần tham chiếu đến Message (hoặc thư) mà bạn muốn xóa - nếu bạn đọc thành công thì bạn đã có thể thực hiện việc này. Bây giờ, không có delete() hoạt động rõ ràng, nhưng bạn có thể đánh dấu thư là xóa như vậy:

message.setFlag(Flags.Flag.DELETED, true); 

này sẽ đánh dấu các tin nhắn đã xóa (mà thường là những gì một hoạt động xóa sẽ làm trong một ứng dụng IMAP để bàn). Để buộc các tin nhắn đã xóa được xóa mà, khi bạn đã hoàn tất với Folder (s), trong đó họ cư trú, gọi

folder.close(true); 

nơi cờ đúng chỉ thị các máy chủ để xóa hẳn tất cả thư đã xóa.

Và thì đấy! Khách hàng sẽ không còn thấy các thông báo này khi anh kết nối với máy chủ với bất kỳ ứng dụng khách IMAP nào.

EDIT:

Đừng quên để mở thư mục trong chế độ READ_WRITE nếu không tin nhắn sẽ không thực sự bị xóa khỏi máy chủ.

folder.open(Folder.READ_WRITE); 

Xem: http://java.sun.com/developer/onlineTraining/JavaMail/contents.html#JavaMailDeleting

+1

Sau đó cung cấp cho nó câu trả lời sử dụng lá cờ. – Koekiebox

+0

tên phương thức nên là [setFlag] không phải [setFlags] [message.setFlag (Flags.Flag.DELETED, true);] –

+0

@MohammedSayed Cảm ơn, bạn nói đúng. Tôi nghĩ điều này có thể là do thay đổi API trong một phiên bản gần đây, nhưng không - nó chỉ là sai trong gần bốn năm! –

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