2010-04-20 42 views
5

Tôi đang sử dụng một thư viện nhỏ java smtp (http://code.google.com/p/subethasmtp/), bằng cách này, tôi cần phải phân tích các email gửi đến trong thành phần riêng biệt tức là cơ thể, file đính kèm, vvtập tin đính kèm email phân tích qua mime4j

Tôi cố gắng để sử dụng mime4j, nhưng tài liệu cho thấy rằng mime4j chỉ có thể cung cấp thông báo sự kiện hoặc thông báo mã thông báo và không có gì khác. Để loại bỏ phần thân và các phần đính kèm, tôi phải sử dụng logic tùy chỉnh của riêng mình bên trong các trình xử lý sự kiện. Quan sát của tôi có đúng không?

Nếu có thì làm thế nào tôi có thể sử dụng mime4j để sử dụng cho yêu cầu của tôi. Xin đề nghị.

Tôi rất cần một phương pháp tiếp cận luồng dữ liệu smtp và trả lại cho tôi một mảng tham chiếu đính kèm hoặc luồng ở dạng được phân tích cú pháp đầy đủ trong java. Hãy giúp tôi.

Cảm ơn trước

Ashish Sharma

+0

Trong khi đó, khi tự điều tra, tôi tìm thấy một thư viện perl MIME :: PARSER được sử dụng trong amavisd-new. Những người gửi thư từ amavisd-new nói với tôi rằng một đối tượng mail đã giải mã giống như những gì tôi yêu cầu có thể được tham chiếu từ kịch bản lệnh perl amavisd mới, nhưng liệu tôi có thể sử dụng nó từ perl vào java? –

+1

Tôi đã gặp phải vấn đề tương tự như bạn và trong khi googling nhận thấy tên của bạn trên khắp nơi này (danh sách gửi thư, diễn đàn). Cảm ơn bạn đã tiết kiệm thời gian cho tôi! –

Trả lời

9

Mime4j chắc chắn có thể làm những gì bạn cần. Tạo một lớp con của org.apache.james.mime4j.message.SimpleContentHandler và triển khai phương thức bodyDecoded. Sau đó, chuyển lớp con này thành một cá thể MimeStreamParser. Bạn sẽ thấy rằng bodyDecoded được gọi một lần cho mỗi phần thân hoặc phần đính kèm và luồng nó cung cấp cho bạn chứa dữ liệu với giải mã Base64 hoặc Quoted-Printable đã được thực hiện.

Nếu bạn không thích các API dựa trên sự kiện nói chung, bạn có thể thử chức năng giống như DOM được hiển thị thông qua lớp org.apache.james.mime4j.message.Message. Bạn có thể gọi Message.getBody() và sau đó xem nếu nó cung cấp cho bạn trở lại là một thể hiện của Multipart, TextBody, BinaryBody, vv Nếu Multipart, sau đó bạn có thể gọi Multipart.getBodyParts để recurse vào các subparts.

+0

cảm ơn vì gợi ý, bây giờ tôi đang gặp vấn đề trong việc tái tạo thư được gửi từ iphone, tiêu đề thư có "X-Mailer: iPhone Mail (7D11)", ai có thể cho tôi biết tôi cần phải đặt logic tùy chỉnh nào cho tài khoản thư qua điện thoại. –

+0

Mọi vấn đề được giải quyết mime4j hoạt động tốt hơn rất nhiều so với api thư java. –

2

@Ashish sự lựa chọn nào khác kể từ khi bạn đang sử dụng SubEthaSmtp là để làm gì SubEtha Thư Danh sách quản lý thực hiện: http://code.google.com/p/subetha/source/browse/trunk/src/org/subethamail/common/SubEthaMessage.java

Lớp liên kết mở rộng SMTPMessage và trong đó có một loạt các getPart() phương pháp. javax.mail.Part có hầu hết những gì bạn cần để chuyển tệp đính kèm vào tệp.

+0

Adam, Hiện tại tôi đang sử dụng email api của chính nó để phân tích cú pháp email để loại bỏ thân thư và tệp đính kèm thành các tệp riêng biệt. Lý do tôi đang tìm kiếm để mime4j là java api thư không thành công ở lần và không phải là lỗi khoan dung cho các tin nhắn mime xấu định dạng (kinh nghiệm của tôi) và mime4j hứa hẹn đó. Vì vậy, như là một thay thế tôi đang nhìn vào mime4j. Tôi sẽ sớm đăng kết quả chi tiết của mình. –

+0

Adam, mime4j chắc chắn là một lựa chọn tốt hơn nhiều cho java api mail, Nó cung cấp giao diện sạch để thực hiện. Kết quả thử nghiệm của tôi với mime4j (0,7) đã xuất sắc. –

Các vấn đề liên quan