Java中的IMAP客户端:JavaMail API还是Apache Commons Net?

ben*_*ser 23 java email imap jakarta-mail apache-commons

我必须用Java实现IMAP客户端.

使用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]");
}
Run Code Online (Sandbox Code Playgroud)

我们可以将输出定向到字符串

client.addProtocolCommandListener(new PrintCommandListener(System.out, true));
Run Code Online (Sandbox Code Playgroud)

但是,如何将文件夹列表作为文件夹实例而不是纯字符串输出?

Ser*_*sta 18

简短说明:这取决于您的实际要求.

如果您的客户端主要专注于发送和读取邮件,则JavaMail API是事实上的标准高级API,组合邮件,添加标头和/或附件将更加简单.

另一方面,如果您打算提供IMAP协议的所有可能性,则较低级别的Apache Commons Net库将允许更详细的操作,代价是更简单操作的样板代码.

只是为了完成这个答案,你不应该忘记Apache Commons Email,它根据项目的主页建立在Java Mail API之上,旨在简化它.它更接近JavaMail而不是Commons Net.

如果不知道自己想要做什么,就很难给出更准确的答案......

  • 个人意见:Commons邮件"更简单",因为它的API试图像用户那样考虑电子邮件,而JavaMail API则暴露了故事的MIME端.从技术上讲,Javamail是一种自然的API.所以在Javamail中"添加附件"意味着从SinglePart转换为Multipart Mime,处理每个部分的标题,Q-Encoding这个或那个,以及所有.Commons Mail将有一个`addAttachment`方法,可以完成所有这些工作,处理文件名,编码......但是当它涉及高级配置时,例如启用IMAP/SSL和SMTP身份验证,两者都同样有效. (4认同)