2010-10-27 19 views
12

Estoy tratando de leer un correo electrónico usando ruby ​​mail gem. Pero mail.body.decoded me devuelve no solo el mensaje del cuerpo. ¿Cómo puedo limpiar este mensaje de cuerpo y eliminar texto no deseado como:Gema del correo - cómo limpiar la cadena del cuerpo

-20cf30433c9a437cc304939017ef\nContent-Type: text/plain; charset=ISO-8859-1\nContent-

message = $stdin.read 
mail = Mail.read_from_string(message) 
puts mail.body.decoded 

--20cf30433c9a437cc304939017ef\nContent-Type: text/plain; charset=ISO-8859-1\nContent-Transfer-Encoding: quoted-printable\n\n REAL BODY TEXT \\n\n--20cf30433c9a437cc304939017ef\nContent-Type: text/html; charset=ISO-8859-1\nContent-Transfer-Encoding: quoted-printable\n\n<br clear=3D\"all\">--20cf30433c9a437cc304939017ef--

¿Cómo puedo limpiar este mensaje de correo cuerpo del correo electrónico extraer sólo el texto cuerpo real, sin ningún cabecera?

Estoy creando un sistema de tickets simple basado en Ruby on Rails, y se crea un ticket cuando [email protected] recibe un correo electrónico. Pero cuando el mensaje está en formato HTML, BODY TEXT está rodeado por el texto HEADERs.

Respuesta

8

Si usted tiene un correo electrónico con el formato adecuado, puede utilizar los métodos de ayuda Mail:

mail = Mail.new(email_string) 
mail.text_part # finds the first text/plain part 
mail.html_part # finds the first text/html part 

esto no siempre funciona si tienes, por ejemplo mensajes de una sola parte (solo texto) o recibir correos electrónicos de Internet en general, ya que no puede confiar en el formato de cada cliente que existe. Créame, he aprendido de la manera difícil.

8

parece que tienes un correo electrónico de varias partes, por lo que puede utilizar mail.parts [0] .body.decoded Estos probablemente ser útil también: mail.multipart?
mail.parts.length

La documentación joya en github es bastante decente

+0

Eso es exactamente lo que estaba buscando! Muchas gracias. – newx

0

Agregue la gema del correo y simplemente use el formato del cuerpo del correo electrónico con mail.parts [1] .body.decoded.

0

Con la mail gema, que puede hacer:

text = mail.multipart? ? mail.text_part.decoded : mail.body.decoded` 
Cuestiones relacionadas