2013-04-25 102 views
19

我必须在Java中实现一个IMAP客户端。Java中的IMAP客户端:JavaMail API或Apache Commons Net?

使用Apache Commons Net库有哪些优势?它是否使得实现更健壮,更灵活?

我该如何处理返回值,它总是会产生字符串。

例如:

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

,我们可以直接通过

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

但我怎样才能得到文件夹,文件夹实例,代替纯串输出的列表输出字符串?

+1

不能相信没有发生过任何像样的回答这个问题。 – JohnMerlino 2014-06-19 21:24:03

+0

有一个很棒的Apache Commons Mail API,为什么不使用它? – msrd0 2014-10-20 19:40:17

+2

该问题应该作为离题,作为推荐请求而结束。 – EJP 2014-10-20 21:27:05

回答

13

短篇小说:它取决于您的真实需求。

如果你的客户主要集中在发送和阅读邮件,则的JavaMail API是一个事实上的标准的高层次的API,它会简单得多撰写邮件,添加页眉和/或附着物。

在另一方面,如果你打算提供IMAP协议的一切准备,较低级阿帕奇百科全书网库将允许更详细的操作,在多个锅炉板代码进行简单的成本操作。

只是为了完成这个答案,你不应该忘记它根据项目的home page建立在Java邮件API,它旨在简化的顶部Apache的通用电子邮件。它比JavaMail更接近Commons Net。

不知道更多的人愿意做什么,这是很难给出一个更精确的答案...

+0

* Apache Commons Email,建立在JavaMail API的基础之上,它旨在简化*它是否实际上简化了所有内容? – user7610 2014-10-21 20:25:22

+0

@ user7610:说实话,我从来没有使用它,只引用项目主页上写的内容。 – 2014-10-21 21:22:46

+3

个人观点:Commons邮件是“更简单”的,因为它的API试图以用户的方式来考虑电子邮件,而JavaMail API公开了故事的MIME端。 从技术上讲,Javamail是一个自然的API。因此,在Javamail中“添加附件”意味着从SinglePart转换为Multipart Mime,处理每个部分的头文件,Q编码这个或那个,以及所有。 Commons Mail将有一个'addAttachment'方法来处理文件名和编码... 但是,当涉及到像启用IMAP/SSL和SMTP身份验证这样的高级配置时,两者都具有相同的脚位。 – GPI 2014-10-24 08:45:16

2

我怎样才能得到文件夹列表作为文件夹实例而不是纯字符串输出?

它看起来像apache IMAPClient是一个围绕IMAP协议的低级包装,因此没有提供比字符串更漂亮的东西。对于更高级别的API,您可以查看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();