1

如何使用 Ruby on Rails 仅解析电子邮件的正文?下面是我想出的。我已经深入到身体的主题,但我想要的只是身体。我试图在不使用 TMail 或基于电子邮件的库的情况下解析它。

节目

<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

\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_body 的结果

Body: Test for long subject Body

结果我想得到

Body
4

1 回答 1

5

您应该使用为您执行此操作的 gem,例如mail!你可以这样做:

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

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

注意:我猜你说你想避免使用邮件库,但为什么呢?这将有很大帮助。这个也是纯红宝石。

于 2012-08-08T23:49:04.160 回答