rails - 仅为回复解析电子邮件,而不是旧线程?

时间:2010-11-18 01:35:19

标签: ruby-on-rails ruby-on-rails-3 actionmailer

我将我的应用设置为通过服务中的帖子接收传入的电子邮件。接收帖子的控制器看起来有点像这样:

    class IncomingMailsController < ApplicationController    
      require 'mail'
      skip_before_filter :verify_authenticity_token

      def create
        message = Mail.new(params[:message])
        message_plain = (params[:plain])
        Rails.logger.info   'message2.plain:'
        Rails.logger.info   message2

        render :text => 'success', :status => 200 # a status of 404 would reject the mail
      end
    end

成功传递完整的电子邮件,回复,转发历史等。问题是我希望能够只提取实际的回复文本。

目前我得到:

That's not a bad idea. Lets try that out.

On Nov 17, 2010, at 4:18 PM, XXXXX @ XXXXXXXX wrote:
> There's a new reply:

我想知道rails devs如何获得回复:

That's not a bad idea. Lets try that out.

想法?感谢

3 个答案:

答案 0 :(得分:3)

没有保证获取整个消息的方法,但通常的做法是使用分隔符,然后使用一些代码来解析响应行。

例如,如果您查看开源项目teambox中的代码,您会看到与以下内容非常相似的内容:

def strip_responses(body)
# For GMail. Matches "On 19 August 2010 13:48, User <proj+conversation+22245@app.teambox.com<proj%2Bconversation%2B22245@app.teambox.com>> wrote:"
body.strip.
  gsub(/\n[^\r\n]*\d{2,4}.*\+.*\d@app.teambox.com.*:.*\z/m, '').
  split("---------separator---------").first.
  split("<div class='email'").first.
  strip
end

答案 1 :(得分:0)

不是一个完美的宝石,但你可以从Github尝试这个宝石:Email Reply Parser

答案 2 :(得分:0)

查看extended_email_reply_parser,其中还包括github's email_reply_parser

安装

将其添加到Gemfile

# Gemfile
gem 'extended_email_reply_parser'

用法

然后,您可以像这样解析电子邮件回复:

message_plain = ExtendedEmailReplyParser.parse message

实施例

应用于您的代码:

class IncomingMailsController < ApplicationController    
  skip_before_filter :verify_authenticity_token

  def create
    message = Mail.new(params[:message])
    message_plain = ExtendedEmailReplyParser.parse(message)

    render :text => 'success', :status => 200 # a status of 404 would reject the mail
  end
end

email_reply_parser与extended_email_reply_parser

email_reply_parser 由github使用和开发。它虽然小巧又高效,但却无法处理一些边缘情况,而发件人的电子邮件客户端并没有将之前的会话格式化为报价。

extended_email_reply_parser 是github解析器的可扩展包装器。它没有原始效率那么高效。但是,如果您正在解析的典型电子邮件处理得不是很好,那么扩展起来会更容易。

资源