0

メールを取得してDBに保存するために使用しているコードは次のとおりです。

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 に答える