使用ruby-mail读取电子邮件不会以文本格式返回邮件正文

时间:2012-05-05 16:53:23

标签: ruby email rubygems mail-gem

我使用ruby-mail阅读电子邮件。

除了邮件正文外,所有内容都以正确的格式呈现。

邮件正文显示为其他编码格式。

我的代码是:

Mail.defaults do
  retriever_method :pop3, :address    => "some.email.com",
              :port       => 995,
              :user_name  => 'domain/username',
              :password   => 'pwd',
              :enable_ssl => true
end


puts "From"
puts mail.from
puts "Sender:"
puts mail.sender
puts "To:"
puts mail.to              
puts "CC:"
puts mail.cc              
puts "Subject:"
puts mail.subject         
puts "Date:"
puts mail.date.to_s       
puts "MessageID:"
puts mail.message_id      
puts "Body:"
#puts mail.body

输出是:

从 legalholdnotification123@emc.com

发信人:

要: bhavesh.sharma@emc.com

CC

主题: 案例4:法律保留通知

日期: 2012-04-24T14:46:25-04:00

邮件ID: 3298720.1335293185423.JavaMail.root@vm-bhaveshok7

体:

日期:星期六,2012年5月5日09:45:08 -0700 哑剧版:1.0 内容类型:text / plain;  字符集= utf-8的 内容传输编码:base64 Content-ID:< 4fa559147a120_138455aab4289ac@USITHEBBASL2C.mail>

SGVsbG8gU2lyL01hZGFtLA0KDQpCcmllZiBpbnRyb2R1Y3Rpb24gdG8gdGhl IGNhc2UgY2FzZTQNCg0KV2UgaGF2ZSBpZGVudGlmaWVkIHlvdSBhcyBhIHBl cnNvbiB3aG8gbWF5IGhhdmUgImRvY3VtZW50cyIgLS0gd2hpY2ggaW5jbHVk ZXMgYm90aCBwaHlzaWNhbCBhbmQgZWxlY3Ryb25pYyBkb2N1bWVudHMgLS0g dGhhdCBhcmUgcmVsYXRlZCB0byB0aGlzIG1hdHRlci4gV2UgYXJlIGltcGxl bWVudGluZyBhIG1hbmRhdG9yeSBkb2N1bWVudCByZXRlbnRpb24gcG9saWN5 IHRvIHByZXNlcnZlIHRoZXNlIGRvY3VtZW50cy4gUGxlYXNlIGNhcmVmdWxs eSByZXZpZXcgdGhpcyBtZW1vcmFuZHVtIGFuZCBzdHJpY3RseSBhZGhlcmUg dG8gdGhlIG1hbmRhdG9yeSBkb2N1bWVudCByZXRlbnRpb24gcG9saWN5IG91 dGxpbmVkIGhlcmVpbi4gW0NvbXBhbnldIGNvdWxkIGJlIHN1YmplY3QgdG8g

所以我无法阅读邮件正文。

我需要做什么才能阅读邮件,我需要从正文中提取文本,并且必须使用邮件正文中存在的链接。

Bhavesh

3 个答案:

答案 0 :(得分:4)

邮件宝石不会自动解码身体。您可以使用:

mail.message.body.decoded

获取已解码的邮件正文。 此外,您可能会发现要访问消息的HTML部分的plain。为此,您可以使用以下内容:

plain_part = message.text_part ? message.text_part.body.decoded : nil
html_part = message.html_part ? message.html_part.body.decoded : nil

然后,您可以使用message.body.decoded作为后备,以防这些部分不存在。

答案 1 :(得分:0)

添加mail gem并使用mail.parts [1] .body.decoded

使用电子邮件正文格式

答案 2 :(得分:0)

我用过:

[...]

ids = imap.search(['UNSEEN'])

ids.each do |msg_id|
  raw_msg = imap.fetch(msg_id,'RFC822').first.attr['RFC822']
  msg = Mail.read_from_string raw_msg
  msg_body_content = msg.multipart?? msg.text_part.body.decoded : message.html_part.body.decoded
end