Client IMAP en Java: API JavaMail ou Apache Commons Net?
je dois implémenter un Client IMAP en Java.
Quels avantages a L'utilisation de la bibliothèque Apache Commons Net? La mise en œuvre est-elle plus robuste et plus souple?
Comment dois-je gérer les valeurs de retour, il produit toujours des chaînes.
par exemple:
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]");
}
et nous pouvons diriger la sortie vers la chaîne de caractères par
client.addProtocolCommandListener(new PrintCommandListener(System.out, true));
Mais comment puis-je obtenir une liste des dossiers comme des instances de dossier au lieu de pure production de chaîne de caractères?
3 réponses
Nouvelle: cela dépend de vos besoins réels.
si votre client est principalement axé sur l'envoi et la lecture de courrier , le API JavaMail est de facto une API standard de haut niveau, et il sera beaucoup plus simple de composer du courrier, ajouter des en-têtes et/ou des attachements.
, d'autre part, si vous avez l'intention d'offrir toutes les possibilités du protocole IMAP , le niveau inférieur Apache Commons Net bibliothèque permettra des opérations plus détaillées, au coût de plus de code de chaudière pour les opérations simples.
juste pour compléter cette réponse, vous ne devez pas oublier Apache Commons Email , qui selon la page d'accueil du projet est construit sur le dessus de L'API Java Mail, qui vise à simplifier . Il est beaucoup plus proche de JavaMail que de Commons Net.
Sans en savoir plus de ce que l'on veut faire, il est difficile de donner une réponse précise...
envisager de regarder récupérer les e-mails non lus de Gmail-JavaMail API + IMAP
c'est codé en utilisant L'API JavaMail, mais à mon avis cela a une interface beaucoup plus simple que la bibliothèque Apache commons.
si vous voulez vraiment utiliser la bibliothèque Apache commons, regardez les javadocs et voyez quels autres paramètres vous pouvez passer à .select()
.
Comment puis-je obtenir une liste de dossiers en tant qu'instances de dossiers au lieu d'une simple sortie de chaîne de caractères?
on dirait qu'apache IMAPClient est un enveloppeur de bas niveau autour du protocole IMAP, donc rien de plus fantaisiste que des chaînes de caractères ne sont fournis. Pour une API de niveau supérieur, vous pouvez consulter la bibliothèque 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();