2013-04-25 12 views
19

Devo implementare un client IMAP in Java.Client IMAP in Java: API JavaMail o Apache Commons Net?

Quali vantaggi utilizza la libreria Apache Commons Net? Rende l'implementazione robusta e più flessibile?

Come è necessario gestire i valori restituiti, produce sempre stringhe.

Ad esempio:

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]"); 
} 

e siamo in grado di indirizzare l'output di stringa

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

Ma come posso ottenere un elenco di cartelle come istanze di cartelle, invece di uscita stringa di puro?

+1

non posso credere che non c'è stata alcuna risposta decente a questa domanda. – JohnMerlino

+0

C'è una grande API Apache Commons Mail, perché non usarla? – msrd0

+2

Questa domanda dovrebbe essere chiusa come off-topic, essendo una richiesta di raccomandazione. – EJP

risposta

13

Breve storia: dipende dalle vostre reali esigenze.

Se il client è focalizzata principalmente su invio e la lettura della posta, l'API JavaMail è un'API di alto livello standard de-facto, e sarà molto più semplice da comporre la posta, aggiungere intestazioni e/o attachements .

D'altra parte, se avete intenzione di offrire tutte le possibilità del protocollo IMAP, il livello inferiore Apache Commons Net biblioteca permetterà operazioni più dettagliate, al costo di più caldaie codice piastra per semplice operazioni.

solo per completare questa risposta, non si deve dimenticare Apache Commons Email, che secondo il home page del progetto è costruito in cima alla API Java Mail, che mira a semplificare. È molto più vicino a JavaMail che a Commons Net.

Senza sapere più di quello che si vuole fare, è difficile dare una risposta più precisa ...

+0

* E-mail di Apache Commons, costruita sopra l'API JavaMail, che si propone di semplificare * E in realtà semplifica qualsiasi cosa? – user7610

+0

@ user7610: ad essere onesti, non l'ho mai usato e ho solo citato ciò che è stato scritto sulla home page del progetto. –

+3

Parere personale: la posta di Commons è "più semplice" in quanto la sua API prova a pensare alla posta elettronica come un utente, mentre l'API JavaMail espone il lato MIME della storia. Tecnicamente, Javamail è un'API naturale. Quindi "aggiungere un allegato" in Javamail significa convertire da SinglePart a Multipart Mime, occupandosi delle intestazioni di ciascuna parte, codifica Q questo o quello e tutto. Commons Mail avrà un metodo 'addAttachment' che farà tutto ciò, gestirà nomi di file, codifiche ... Ma quando si tratta di configurazione avanzata come, ad esempio, abilitando l'autenticazione IMAP/SSL e SMTP, entrambi sono ugualmente a posto. – GPI

1

considerare guardando Retrieve UnRead Emails from Gmail - JavaMail API + IMAP

E 'codificato utilizzando l'API JavaMail, ma a mio parere questo è dotato di un'interfaccia molto più semplice rispetto alla libreria di Commons Apache.

Se si desidera utilizzare la libreria di Apache comuni, dare un'occhiata ai javadoc e vedere quali altri parametri è possibile passare a .select().

2

come è possibile ottenere l'elenco di cartelle come istanze di cartella anziché l'output di stringa pura?

Sembra apache IMAPClient è un wrapper di basso livello attorno al protocollo IMAP, quindi non è fornito nulla di più interessante delle stringhe. Per un'API di livello più alto, si poteva guardare nella libreria 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(); 
Problemi correlati