2010-10-27 12 views
12

Ich versuche, eine E-Mail mit Ruby Mail Gem zu lesen. Aber mail.body.decoded gibt mir nicht nur die Nachricht des Körpers zurück. Wie kann ich diese Körper Nachricht aufzuräumen und entfernen Sie unerwünschte Text wie:Mail Juwel - wie man den Körper string

-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--

Wie kann ich diese E-Mail-Körper-Mail-Nachricht nur die REAL BODY TEXT Extrahieren aufzuräumen, ohne ANY Header ?

Ich erstelle ein einfaches Ticket-System in Ruby on Rails, und ein Ticket wird erstellt, wenn eine E-Mail von [email protected] empfangen wird. Wenn die Nachricht jedoch im HTML-Format vorliegt, ist der BODY TEXT von HEADER-Text umgeben.

Antwort

8

Wenn Sie eine korrekt formatierte E-Mail haben, können Sie E-Mail-Helfer Methoden verwenden:

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

Das ist nicht immer tut Arbeit, wenn Sie z Single-Part-Nachrichten (nur Text) oder empfangen Sie E-Mails aus dem Internet insgesamt, da Sie sich nicht auf die Formatierung von jedem Client da draußen verlassen können. Glaub mir, ich habe es auf die harte Tour gelernt.

8

sieht aus wie Sie eine Multipart-E-Mail haben, so dass Sie mail.parts verwenden können [0] .body.decoded Auch diese werden wahrscheinlich kommen in praktisch: mail.multipart?
mail.parts.length

Die gem Dokumentation github ziemlich anständig ist

+0

Das ist genau das, was ich gesucht habe! Vielen Dank. – newx

0

Fügen Sie das E-Mail-Juwel hinzu und verwenden Sie einfach das E-Mail-Textformat mit mail.parts [1] .body.decoded.

0

Mit dem mail Juwel, können Sie tun:

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