2010-08-09 59 views
25

Có ai quen thuộc với thư viện Java giúp phân tích cú pháp các trường (ngày, chủ đề, từ, sang) của email bên dưới không?Trình phân tích cú pháp email Java?

Message-ID: <[email protected]> 
Date: Wed, 6 Mar 2010 12:32:20 -0800 (PST) 
From: [email protected] 
To: [email protected] 
Subject: some subject 
Mime-Version: 1.0 
Content-Type: text/plain; charset=us-ascii 
Content-Transfer-Encoding: 7bit 
X-From: one, some <[email protected]> 
X-To: one 
X-cc: 
X-bcc: 
X-Folder: Bob\Inbox 
X-Origin: Bob-R 
X-FileName: rbob (Non-Privileged).pst 


some message 

Trả lời

32

JavaMail là một thư viện oracle cung cấp dịch vụ mail và các dịch vụ email liên quan (như phân tích & thông điệp MIME thông thường) trong gói javax.mail. Ngoài ra, Apache còn có thư viện Commons Email để xử lý thư.

Trong api JavaMail, một cách đơn giản để phân tích một chuỗi có chứa một thông điệp email (có thể hoặc không thể là một cách rõ ràng MIME) sẽ như sau

String content = ... 
Session s = Session.getInstance(new Properties()); 
InputStream is = new ByteArrayInputStream(content.getBytes()); 
MimeMessage message = new MimeMessage(s, is); 

và phân tích các tiêu đề có thể được thực hiện như thế này

message.getAllHeaderLines(); 
for (Enumeration<Header> e = message.getAllHeaders(); e.hasMoreElements();) { 
    Header h = e.nextElement(); 
    h.getName(); 
    h.getValue(); 
} 
+0

tuyệt vời, chính xác những gì tôi cần. Cảm ơn bạn sir – Kareem

+0

Nhưng làm cách nào để phân tích cú pháp tiêu đề "Từ:" và tách biệt giữa tên và địa chỉ email –

+1

@HendyIrawan có phương thức getFrom() trên lớp Thông báo. Nó trả về một kiểu Address [], và các thành viên của mảng đó thường có thể được đưa vào kiểu InternetAddress nếu bạn đang xử lý các thông điệp email thực tế. Lớp này có các phương thức để nhận tên và các phần email của một địa chỉ tương thích RFC822. – Jherico

9

Tôi đã gặp sự cố với JavaMail (không phân tích được một số thư email mà nó cần).

Tôi đã có kết quả tốt hơn nhiều với Mime4J.

+0

- Bạn có nhận thấy nó thất bại đối với các tin nhắn được tạo bằng bất kỳ ứng dụng hoặc nền tảng cụ thể nào không? –

4

tôi sẽ đề nghị bạn sử dụng email-mime-parser,

Sau mẫu mã cung cấp cho bạn tất cả các thông tin liên quan mà bạn cần:

ContentHandler contentHandler = new CustomContentHandler(); 

MimeConfig mime4jParserConfig = new MimeConfig(); 
BodyDescriptorBuilder bodyDescriptorBuilder = new DefaultBodyDescriptorBuilder(); 
MimeStreamParser mime4jParser = new MimeStreamParser(mime4jParserConfig,DecodeMonitor.SILENT,bodyDescriptorBuilder); 
mime4jParser.setContentDecoding(true); 
mime4jParser.setContentHandler(contentHandler); 

InputStream mailIn = 'Provide email mime stream here'; 
mime4jParser.parse(mailIn); 

Email email = ((CustomContentHandler) contentHandler).getEmail(); 

List<Attachment> attachments = email.getAttachments(); 

Attachment calendar = email.getCalendarBody(); 
Attachment htmlBody = email.getHTMLEmailBody(); 
Attachment plainText = email.getPlainTextEmailBody(); 

String to = email.getToEmailHeaderValue(); 
String cc = email.getCCEmailHeaderValue(); 
String from = email.getFromEmailHeaderValue(); 
+0

Điều này được dựa trên Mime4j –

+0

Có, Nó được dựa trên Mime4j –

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