2010-08-09 14 views
25

¿Alguien está familiarizado con una biblioteca Java que ayude a analizar los campos (fecha, asunto, desde, a) del correo electrónico a continuación?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 

Respuesta

32

JavaMail es una biblioteca de Oracle que proporciona servicios de correo y servicios relacionados con el correo (como análisis sintáctico & mensajes MIME convencionales) en el paquete javax.mail. Además, Apache tiene una biblioteca Commons Email para el manejo de correo.

en la API JavaMail, una forma sencilla de analizar una cadena que contiene un mensaje de correo electrónico (que pueden o no estar explícitamente MIME) sería el siguiente

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

y analizar las cabeceras se podría hacer como esto

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

excelente, exactamente lo que necesitaba. Gracias señor – Kareem

+0

Pero, ¿cómo puedo analizar el encabezado "De:" y separar entre los nombres y las direcciones de correo electrónico –

+1

@HendyIrawan hay un método getFrom() en la clase de mensaje. Devuelve un tipo de Dirección [], y los miembros de esa matriz generalmente se pueden convertir a un tipo de Dirección de Internet si se trata de mensajes de correo electrónico reales. Esta clase tiene métodos para obtener las partes de nombre y correo electrónico de una dirección compatible con RFC822. – Jherico

9

He tenido problemas con JavaMail (no analiza algunos mensajes de correo electrónico que debería).

He tenido resultados mucho mejores con Mime4J.

+0

- ¿Ha notado que falla en los mensajes mime generados con cualquier aplicación o plataforma específica? –

4

Yo sugeriría que utilice email-mime-parser,

siguiente ejemplo de código le da toda la información relevante que necesita:

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

Esto se basa en Mime4j –

+0

Sí, está basado en Mime4j –