2013-04-25 24 views
19

Muszę zaimplementować klienta IMAP w Javie.Klient IMAP w Javie: JavaMail API lub Apache Commons Net?

Jakie zalety ma korzystanie z biblioteki Apache Commons Net? Czy sprawia, że ​​wdrożenie jest solidne i bardziej elastyczne?

Jak mam obsłużyć zwracane wartości, zawsze generuje ciągi znaków.

Na przykład:

public static void main(String[] args) throws Exception { 
    IMAPClient client = new IMAPClient(); 
    client.connect(SERVER); 
    client.login(USERNAME, PASSWORD); 
    client.select("INBOX"); 
    client.fetch("1", "body[header]"); 
} 

i możemy przekierować do łańcucha przez

client.addProtocolCommandListener(new PrintCommandListener(System.out, true)); 

ale jak mogę dostać się lista folderów przypadkach folderów zamiast czystej produkcji strun?

+1

nie mogę uwierzyć, że nie było żadnych godnych odpowiedzi na to pytanie. – JohnMerlino

+0

Istnieje świetny interfejs API Apache Commons Mail, dlaczego nie skorzystać z tego? – msrd0

+2

To pytanie powinno być zamknięte jako nietypowe, będące prośbą o rekomendację. – EJP

Odpowiedz

13

opowiadanie: To zależy od rzeczywistych potrzeb.

Jeśli klient skupia się głównie na wysyłanie i czytanie poczty The JavaMail API jest de facto standardem wysokiego poziomu API, a to będzie dużo prostsze komponować wiadomości, dodawać nagłówki i/lub załączniki .

Z drugiej strony, jeśli zamierzają zaoferować wszystkie możliwości protokołu IMAP, tym niższy poziom Apache Commons Net biblioteka pozwoli na bardziej szczegółowe działania, kosztem większej kotłowni kodu płyta dla prostych operacje.

Wystarczy, aby zakończyć tę odpowiedź, nie należy zapominać Apache Commons email, który według home page projektu jest zbudowany na szczycie API Java Mail, który ma na celu uproszczenie. Jest znacznie bliższy JavaMail niż Commons Net.

Nie wiedząc więcej, co chce zrobić, to trudno dać bardziej precyzyjną odpowiedź ...

+0

* Apache Commons Email, zbudowany na interfejsie API JavaMail, który ma na celu uproszczenie * I faktycznie upraszcza wszystko? – user7610

+0

@ user7610: Szczerze mówiąc, nigdy z niego nie korzystałem i cytowałem tylko to, co było napisane na stronie głównej projektu. –

+3

Opinia osobista: poczta Commons jest "prostsza", ponieważ jej interfejs API próbuje myśleć o wiadomościach e-mail, tak jak robi to użytkownik, podczas gdy interfejs API JavaMail ujawnia stronę MIME. Technicznie, Javamail jest naturalnym API. Zatem "dodanie załącznika" w Javamail oznacza konwersję z SinglePart na Multipart Mime, zajmowanie się nagłówkami każdej części, Q-Encoding tego lub innego, i wszystkim. Commons Mail będzie miał metodę 'addAttachment', która wszystko to zrobi, zajmie się nazwami plików, kodowaniami ... Ale jeśli chodzi o zaawansowaną konfigurację, jak na przykład włączenie uwierzytelniania IMAP/SSL i SMTP, oba są jednakowo uzasadnione. – GPI

1

rozważyć patrząc na Retrieve UnRead Emails from Gmail - JavaMail API + IMAP

To kodowane za pomocą interfejsu API JavaMail, ale moim zdaniem to ma znacznie prostszy interfejs niż świetlicy biblioteki Apache.

Jeśli naprawdę chcesz korzystać z biblioteki commache Apache, spójrz na javadocs i zobacz, jakie inne parametry możesz przekazać .select().

2

Jak mogę uzyskać listę folderów jako instancji folderów zamiast czystych danych wyjściowych?

Wygląda apache IMAPClient jest opakowaniem niskim poziomie całego protokołu IMAP, więc nic bardziej wyszukane niż ciągi są świadczone. Na wyższym poziomie API, można zajrzeć do biblioteki JavaMail:

Session session = Session.getDefaultInstance(System.getProperties(),null); 
Store store = session.getStore("imaps"); 
store.connect(this.host, this.userName, this.password); 

// Get default folder 
Folder folder = store.getDefaultFolder(); 

// Get any folder by name 
Folder[] folderList = folder.list(); 
Powiązane problemy