2013-04-25 32 views
19

Tôi phải triển khai Ứng dụng khách IMAP trong Java.Ứng dụng khách IMAP trong Java: JavaMail API hoặc Apache Commons Net?

Ưu điểm nào đã sử dụng thư viện Net Commons Net? Nó có làm cho việc triển khai mạnh mẽ và linh hoạt hơn không?

Làm cách nào để xử lý các giá trị trả lại, nó luôn tạo chuỗi.

Ví dụ:

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

và chúng ta có thể trực tiếp sản lượng để chuỗi bởi

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

Nhưng làm thế nào tôi có thể nhận được một danh sách các thư mục như trường hợp thư mục thay vì chuỗi xuất tinh khiết?

+1

Không thể tin rằng chưa có câu trả lời nào cho câu hỏi này. – JohnMerlino

+0

Có API Apache Commons Mail tuyệt vời, tại sao không sử dụng? – msrd0

+2

Câu hỏi này phải được đóng dưới dạng chủ đề, là yêu cầu đề xuất. – EJP

Trả lời

13

Câu chuyện ngắn: tùy thuộc vào yêu cầu thực tế của bạn.

Nếu khách hàng của bạn chủ yếu tập trung vào việc gửi và đọc thư, API JavaMail là một tiêu chuẩn cao cấp API de-facto, và nó sẽ được đơn giản hơn nhiều để soạn mail, thêm tiêu đề và/hoặc attachements .

Mặt khác, nếu bạn có ý định cung cấp tất cả các khả năng của giao thức IMAP, các cấp dưới Apache Commons Net thư viện sẽ cho phép các hoạt động chi tiết hơn, với chi phí của nhiều mã tấm nồi hơi cho đơn giản hoạt động.

Chỉ cần để hoàn thành câu trả lời này, bạn không nên quên Apache Commons Email, mà theo các home page của dự án là xây dựng trên đầu trang của Java API Mail, mà nó nhằm mục đích đơn giản hóa. Nó gần gũi hơn với JavaMail so với Commons Net.

Nếu không biết nhiều hơn về những gì người ta muốn làm, khó có thể đưa ra câu trả lời chính xác hơn ...

+0

* Apache Commons Email, được xây dựng dựa trên API JavaMail, mà nó nhằm mục đích đơn giản hóa * Và nó thực sự đơn giản hóa bất cứ điều gì? – user7610

+0

@ user7610: thành thật mà nói, tôi không bao giờ sử dụng nó và chỉ trích dẫn những gì được viết trên trang chủ dự án. –

+3

Ý kiến ​​cá nhân: Thư Commons là "đơn giản hơn" trong đó API của nó cố gắng nghĩ về email như một người dùng, trong khi API JavaMail cho thấy bên MIME của câu chuyện. Về mặt kỹ thuật, Javamail là một API tự nhiên. Vì vậy, "thêm một tập tin đính kèm" trong Javamail có nghĩa là chuyển đổi từ SinglePart sang Multipart Mime, xử lý các tiêu đề của từng phần, Q-Encoding này hoặc điều đó, và tất cả. Commons Mail sẽ có một phương thức 'addAttachment' sẽ làm tất cả, xử lý tên tập tin, mã hóa ... Nhưng khi nói đến cấu hình nâng cao như, cho phép xác thực IMAP/SSL và SMTP, cả hai đều bằng nhau. – GPI

1

Hãy xem xét nhìn vào Retrieve UnRead Emails from Gmail - JavaMail API + IMAP

Nó được mã hóa bằng cách sử dụng API JavaMail, nhưng theo ý kiến ​​của tôi này có một giao diện đơn giản hơn nhiều so với thư viện commons Apache.

Nếu bạn thực sự muốn sử dụng thư viện commons Apache, hãy xem javadocs và xem các thông số khác bạn có thể chuyển đến .select().

2

làm cách nào tôi có thể lấy danh sách thư mục dưới dạng thể hiện thư mục thay vì đầu ra chuỗi thuần túy?

Dường như apache IMAPClient là trình bao bọc cấp thấp xung quanh giao thức IMAP, vì vậy không có gì quan trọng hơn chuỗi được cung cấp. Đối với API cấp cao hơn, bạn có thể xem thư viện 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(); 
Các vấn đề liên quan