以下是我用于获取电子邮件并将其存储到我的数据库中的代码:
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结构真的搞砸了。
答案 0 :(得分: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完全相同,或多或少。