2012-08-05 76 views
0

如何使用Ruby on Rails解析电子邮件正文?以下是我所想到的。我的身体与主题有关,但我想要的只是身体。我试图解析这个,而不使用TMail或基于电子邮件的库。使用Ruby on Rails解析电子邮件正文

显示

<p>Body: <%= @text.parse_body %></p> 

控制器

def show 
    @text = Text.find(params[:id]) 
    end 

模型

class Text < ActiveRecord::Base 
    attr_accessible :email 


    def text_input 
     @raw_email = email.to_s 
    end 

    def parse_body 
    @parse_email = @raw_email.match(/(\r\n\r\n[\W\w\S\s\D\d\b]*\r\n)/i) 
    @parse_body = @parse_email.to_s.gsub(/<[\W\w\S\s\D\d\b]*?>/, "") 
    end 

结果@parse_email @parse_body的

\r\n\r\n<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2//EN\">\r\n<HTML>\r\n<HEAD>\r\n<META 
HTTP-EQUIV=3D\"Content-Type\" CONTENT=3D\"text/html; =\r\ncharset=3Diso-8859-1\">\r\n<META 
NAME=3D\"Generator\" CONTENT=3D\"MS Exchange Server version 
=\r\n6.5.7654.12\">\r\n<TITLE>Test for long subject</TITLE>\r\n</HEAD>\r\n<BODY>\r\n<!-- 
Converted from text/plain format -->\r\n\r\n<P><FONT 
SIZE=3D2>Test<BR>\r\n<BR>\r\n</FONT>\r\n</P>\r\n\r\n</BODY>\r\n" 1:"\r\n\r\n<!DOCTYPE HTML 
PUBLIC \"-//W3C//DTD HTML 3.2//EN\">\r\n<HTML>\r\n<HEAD>\r\n<META HTTP-EQUIV=3D\"Content- 
Type\" CONTENT=3D\"text/html; =\r\ncharset=3Diso-8859-1\">\r\n<META NAME=3D\"Generator\" 
CONTENT=3D\"MS Exchange Server version =\r\n6.5.7654.12\">\r\n<TITLE>Test for long 
subject</TITLE>\r\n</HEAD>\r\n<BODY>\r\n<!-- Converted from text/plain format -- 
>\r\n\r\n<P><FONT SIZE=3D2>Body<BR>\r\n<BR>\r\n</FONT>\r\n</P>\r\n\r\n</BODY>\r\n 

结果

Body: Test for long subject Body 

结果我试图让

Body 

回答

5

您应该使用的宝石,这是否给你如mail!你可以这样做:

mail = Mail.read(@raw_email) 
mail.subject 
mail.body 

等最好避免在写这样的情况下,自己的解析器,如果可能的话!

注:我想你说你想避免邮件库,但为什么?这将有很大帮助。这也是纯粹的红宝石。

+1

请注意'Mail.read'只接受目录。如果你想给原始文章一样的原始字符串,你必须使用'Mail.new(@raw_email)'。 – Seanny123 2013-07-04 08:02:54

相关问题