2012-08-05 3 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_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 

결과 @parse_email

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

관련 문제