0

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

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 结构变得非常混乱。

4

1 回答 1

0

这是工作代码:

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 中的视图完全相同,或多或少。

于 2013-08-04T11:37:17.177 回答