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

AnA*_*ice 5 ruby-on-rails actionmailer ruby-on-rails-3

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

    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
Run Code Online (Sandbox Code Playgroud)

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

目前我得到:

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:
Run Code Online (Sandbox Code Playgroud)

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

That's not a bad idea. Lets try that out.
Run Code Online (Sandbox Code Playgroud)

想法?谢谢

Ste*_*ith 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
Run Code Online (Sandbox Code Playgroud)