2010-08-09 3 views
25

Kennt jemand eine Java-Bibliothek, die beim Parsen der Felder (Datum, Betreff, von, bis) der unten stehenden E-Mail hilft?Java E-Mail-Nachricht Parser?

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 

Antwort

32

JavaMail ist eine Oracle-Bibliothek, die Postdienste und Postbezogene Dienstleistungen (wie Parsen herkömmliche & MIME-Nachrichten) in dem javax.mail Paket enthält. Zusätzlich verfügt Apache über eine Commons Email Bibliothek für die Mail-Bearbeitung.

In der Java Mail api, eine einfache Möglichkeit, eine Zeichenfolge, die eine E-Mail-Nachricht zu analysieren (die MIME explizit kann oder nicht sein kann) sein würde, wie

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

folgt und die Header-Parsing wie dies geschehen könnte

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

ausgezeichnet, genau das, was ich brauchte. Danke sir – Kareem

+0

Aber wie parse ich die "From:" - Header, und trennen Sie zwischen den Namen und die E-Mail-Adressen –

+1

@HendyIrawan gibt es eine getFrom() -Methode für die Message-Klasse. Es gibt einen Address [] -Typ zurück, und die Mitglieder dieses Arrays können normalerweise in einen InternetAddress-Typ umgewandelt werden, wenn Sie mit tatsächlichen E-Mail-Nachrichten zu tun haben. Diese Klasse verfügt über Methoden zum Abrufen des Namens und der E-Mail-Teile einer RFC822-kompatiblen Adresse. – Jherico

9

ich habe Probleme mit Java Mail hatte (es nicht ein paar E-Mails, dass es sollte analysieren).

Ich hatte viel bessere Ergebnisse mit Mime4J.

+0

- Ist es Ihnen aufgefallen, dass Mime-Nachrichten, die mit einer bestimmten Anwendung oder Plattform erstellt wurden, fehlschlagen? –

4

Ich würde Sie email-mime-parser verwenden vorschlagen,

folgende Beispielcode gibt Ihnen alle relevanten Informationen, die Sie brauchen:

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

Dies basiert auf Mime4j –

+0

Ja, es basiert auf Mime4j –