【问题标题】:How do I correctly display fetched email content in Rails?如何在 Rails 中正确显示获取的电子邮件内容?
【发布时间】:2013-08-04 07:40:43
【问题描述】:

这是我用来获取电子邮件并将它们存储到我的数据库中的代码:

emails = imap.search([fp.filter_type, "#{fp.value}"])

emails.each do |message_id|

  msg = imap.fetch(message_id,'RFC822')[0].attr['RFC822']
  mail = Mail.read_from_string msg

  Email.create({
    :user_id    => self.id,
    :message_id => message_id.to_s,
    :email_from => mail.from[0], 
    :subject    => mail.subject, 
    :content    => mail.multipart? ? mail.html_part : mail.body.decoded,
    :sent_at    => mail.date
    }) if !Email.find_by_message_id(message_id.to_s)
end

当我呈现电子邮件记录的内容时,它没有正确显示。但是,这封电子邮件在我的 GMail 帐户上看起来很棒。我需要一种方法来存储正确的 HTML 并像在我的电子邮件帐户中一样显示它。我还需要从这些电子邮件中解析数据,这很困难,因为 DOM 结构非常混乱。

【问题讨论】:

    标签: html ruby-on-rails ruby gmail nokogiri


    【解决方案1】:

    这是工作代码:

    emails = imap.search([fp.filter_type, "#{fp.value}"])
    
    emails.each do |message_id|
    
      msg = imap.fetch(message_id,'RFC822')[0].attr['RFC822']
      mail = Mail.read_from_string msg
      Email.create({
        :user_id            => self.id,
        :message_id         => message_id.to_s,
        :email_from         => mail.from[0], 
        :subject            => mail.subject, 
        :content            => mail.multipart? ? mail.html_part.body.to_s : mail.body.to_s,
        :merchant_id        => merchant.id,
        :filter_id          => filter.id,
        :filter_property_id => fp.id,
        :sent_at            => mail.date
        }) if !Email.find_by_message_id(message_id.to_s)
    end
    
    Email.all.collect {|e| e.run_parsers} if emails.size > 0 # ideally this should be initiated from email model
    

    使用此代码,我能够获得正确的 HTML,并且视图与我的 GMail 中的视图完全相同,或多或少。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      相关资源
      最近更新 更多