2010-04-20 26 views
5

estoy usando una biblioteca pequeña java SMTP (http://code.google.com/p/subethasmtp/), por esto necesito para analizar los mensajes de correo electrónico entrantes en componentes separados a saber cuerpo, archivos adjuntos, etc.adjunto de correo electrónico a través de análisis mime4j

Estoy tratando de utilizar mime4j, pero la documentación sugiere que mime4j solo puede dar notificación de evento o notificación de token y nada más. Para eliminar el cuerpo y los archivos adjuntos, etc. tuve que usar mi propia lógica personalizada dentro de los controladores de eventos. ¿Mi observación es correcta?

Si sí, entonces ¿cómo puedo usar mime4j a utilizar para mi requisito. Por favor recomiende.

que tienen gran necesidad de un enfoque que tenga en el flujo de datos SMTP y me regresa con una serie de referencias de fijación o arroyos en forma totalmente analizada a cabo en Java. Por favor ayuda.

Gracias de antemano

Ashish Sharma

+0

Mientras tanto, en la investigación de uno mismo, me encontré con una biblioteca Perl MIME :: Parser está utilizando en amavisd nuevo. Los chicos de la lista de correo de amavisd-new me dijeron que un objeto de correo decodificado como el que necesito se puede referir desde una nueva secuencia de comandos perl, pero ¿es posible que yo pueda usarlo de Perl a Java? –

+1

Me encontré con el mismo problema que tú y al buscar en Google noté tu nombre en todo este lugar (listas de correo, foros). Gracias por ahorrarme tiempo! –

Respuesta

9

Mime4j sin duda puede hacer lo que necesita. Cree una subclase de org.apache.james.mime4j.message.SimpleContentHandler e implemente el método bodydecoded. Luego, pase esta subclase a una instancia de MimeStreamParser. Verá que BodyDecoded se llama una vez por cuerpo o archivo adjunto, y la transmisión que le brinda contiene los datos con la decodificación Base64 o Quoted-Printable ya realizada.

Si no te gustan las API basadas en eventos en general, puedes probar la funcionalidad más DOM expuesta a través de la clase org.apache.james.mime4j.message.Message. Puede llamar Message.getBody() y luego ver si lo que le da la espalda es una instancia de varias partes, TextBody, BinaryBody, etc. Si varias partes, entonces usted puede llamar a Multipart.getBodyParts recursivo en las subpartes.

+0

gracias por la sugerencia, ahora estoy frente a un problema en la recreación de los correos enviados desde el iPhone, las cabeceras de los mensajes tienen "X-Mailer: iPhone Correo (7D11)", alguien me puede decir qué lógica personalizada tengo que poner para dar cuenta de correo electrónico enviados vía iphones. –

+0

Todos los problemas resueltos mime4j funciona mucho mejor que java mail api. –

2

@Ashish la otra opción dado que está utilizando SubEthaSmtp es hacer lo gestor de listas de correo SubEtha hace: http://code.google.com/p/subetha/source/browse/trunk/src/org/subethamail/common/SubEthaMessage.java

La clase ligada extiende SMTPMessage y que tiene un montón de getPart() métodos. javax.mail.Part tiene la mayor parte de lo que necesita para convertir un archivo adjunto en un archivo.

+0

Adam, actualmente estoy usando Java api de correo electrónico para analizar el correo electrónico para eliminar el cuerpo del correo y los archivos adjuntos en archivos separados. La razón que estoy buscando en mime4j es que la API de correo java falla a veces y no es tolerante a fallas en los mensajes de mime mal formateados (mi experiencia) y mime4j promete eso. Entonces, como alternativa, estoy buscando en mime4j. Publicaré mis resultados detallados pronto. –

+0

Adam, mime4j es definitivamente una alternativa mucho mejor que java mail api, proporciona una interfaz limpia para la implementación. Los resultados de mi prueba con mime4j (0.7) han sido excelentes. –

Cuestiones relacionadas