2009-09-23 12 views
29

here açıklandığı gibi IMAP protokolünü kullanarak sunucudan e-posta alıyorum. Bu çok iyi çalışıyor ve e-postaları ve ekleri diske kaydedebiliyorum. javax.mail kullanarak Sunucuyu e-posta ile silme

Soru: bir istemci tüm e-postalar almak çalıştığında, artık mevcut olduğunu bu yüzden, Server dosyaları silmek imkanı var mı? Eğer öyleyse, lütfen nasıl olduğunu söyle.

cevap

58

Bunu standart API'ler aracılığıyla yapabilmeniz gerekir.

İlk önce silmek istediğiniz Message (veya iletileri) referansını almanız gerekir; eğer başarılı bir şekilde okuyorsanız, bunu zaten yapabilirsiniz. Şimdi, hiçbir açık silme() işlemi, ama şöyle silinmiş olarak bir ileti işaretleyebilirsiniz: silindi olarak

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

Bu bir silme işlemi bir masaüstü IMAP istemcisi ne yapacağını tipik olan (mesaj damgasını vuracak). Eğer ikamet ettikleri Folder (ler) ile bittiğinde silinen mesajları zorlamak amacıyla, tamamen silinmek üzere, gerçek bayrak tüm silinmiş iletileri kalıcı olarak silmek sunucuyu talimatını

folder.close(true); 

diyoruz.

Ve voila! İstemci, artık herhangi bir IMAP istemcisiyle sunucuya bağlandığında bu iletileri görmemelidir.

DÜZENLEME:

aksi iletilerin gerçekten sunucudan silinmez READ_WRITE modunda klasörü açmak için ihmal etmeyin.

folder.open(Folder.READ_WRITE); 

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

+1

Sonra o cevap kullanılan bayrak verir. – Koekiebox

+0

yöntem adı [setFlag] olmalıdır [setFlags] [message.setFlag (Flags.Flag.DELETED, true);] –

+0

@MohammedSayed Doğru, teşekkürler. Bunun yeni bir sürümde bir API değişikliğine düşebileceğini düşündüm, fakat hayır - neredeyse dört yıldır yanılmışım! –