2010-08-09 10 views
25

Quelqu'un est-il familier avec une bibliothèque Java qui aide à analyser les champs (date, objet, de, à) de l'email ci-dessous?Java Email Message 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 

Répondre

32

JavaMail est une bibliothèque d'oracle qui fournit des services de messagerie et les services liés à la messagerie (comme l'analyse syntaxique & conventionnels messages MIME) dans le package javax.mail. En outre Apache a une bibliothèque Commons Email pour la gestion du courrier.

Dans le api JavaMail, un moyen simple pour analyser une chaîne contenant un message électronique (qui peut ou peut ne pas être explicitement MIME) serait le suivant

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

et analyse les en-têtes pourrait se faire comme ça

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

excellent, exactement ce que je avais besoin. Merci monsieur – Kareem

+0

Mais comment puis-je analyser l'en-tête "De:", et séparer les noms et les adresses e-mail –

+1

@HendyIrawan il existe une méthode getFrom() sur la classe Message. Il renvoie un type Address [], et les membres de ce tableau peuvent généralement être castés en un type InternetAddress si vous traitez des emails réels. Cette classe a des méthodes pour obtenir le nom et les parties d'une adresse compatible RFC822. – Jherico

9

J'ai eu des problèmes avec JavaMail (il ne parvient pas à analyser certains messages électroniques).

J'ai eu de meilleurs résultats avec Mime4J.

+0

- Avez-vous remarqué qu'il échoue pour les messages MIME générés avec une application ou une plate-forme spécifique? –

4

Je vous suggère d'utiliser email-mime-parser,

exemple de code vous donne toutes les informations pertinentes dont vous avez besoin:

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

Ceci est basé sur Mime4j –

+0

Oui, elle est basée sur Mime4j –