ruby - 从电子邮件正文中删除标题字符

标签 ruby email

我正在使用 net::imap 和 mail ruby​​ gem。我想获取电子邮件正文,而不是标题。不幸的是,它正在返回带有正文的 header 信息:

require 'net/imap'
require 'mail'
imap = Net::IMAP.new('imap.gmail.com',993, true)
imap.login('user@gmail.com','password')    
imap.select('INBOX')
imap.search(['SINCE', Time.now.strftime('%d-%b-%y')])
raw_message = imap.fetch(1,'RFC822').first.attr['RFC822']
message = Mail.read_from_string raw_message

message.body
 => #<Mail::Body:0x007fa3f4354e00 @boundary="94eb2c13d952954cbc053d82a0e7", @preamble="", @epilogue="", @charset="US-ASCII", @part_sort_order=["text/plain", "text/enriched", "text/html"], @parts=[#<Mail::Part:70171076755380, Multipart: false, Headers: <Content-Type: text/plain; charset=UTF-8>>, #<Mail::Part:70171076752140, Multipart: false, Headers: <Content-Type: text/html; charset=UTF-8>>], @raw_source="--94eb2c13d952954cbc053d82a0e7\r\nContent-Type: text/plain; charset=UTF-8\r\n\r\ntest body\r\n\r\n--94eb2c13d952954cbc053d82a0e7\r\nContent-Type: text/html; charset=UTF-8\r\n\r\n<div dir=\"ltr\">test body</div>\r\n\r\n--94eb2c13d952954cbc053d82a0e7--", @encoding="7bit"> 
message.body.raw_source
 => "--94eb2c13d952954cbc053d82a0e7\r\nContent-Type: text/plain; charset=UTF-8\r\n\r\ntest body\r\n\r\n--94eb2c13d952954cbc053d82a0e7\r\nContent-Type: text/html; charset=UTF-8\r\n\r\n<div dir=\"ltr\">test body</div>\r\n\r\n--94eb2c13d952954cbc053d82a0e7--" 

如何只获取正文?

最佳答案

那些不是邮件标题。那是 MIME邮件正文中的 header 。你有一个 multi-part email , 通常用于提供同一内容的文本和 HTML 版本。

每个部分都被视为另一个 Mail::Message 以单独处理。参见 Reading a Multipart Email .

mail = Mail.read('multipart_email')

mail.multipart?          #=> true
mail.parts.length        #=> 2
mail.body.preamble       #=> "Text before the first part"
mail.body.epilogue       #=> "Text after the last part"
mail.parts.map { |p| p.content_type }  #=> ['text/plain', 'application/pdf']
mail.parts.map { |p| p.class }         #=> [Mail::Message, Mail::Message]
mail.parts[0].content_type_parameters  #=> {'charset' => 'ISO-8859-1'}
mail.parts[1].content_type_parameters  #=> {'name' => 'my.pdf'}

关于ruby - 从电子邮件正文中删除标题字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39736096/

相关文章:

ruby - 什么相当于 rspec 的 'it "在 minitest/spec 中应该是 …", focus: true do'

ruby-on-rails - 如何从 Rails 中的价格字段中删除 "$"和 ","

ruby-on-rails - 使用 Heroku binary 而不是 gem

ruby - 无法使用 Homebrew 软件安装 Ruby

ruby - 使用 Ruby OpenSSL 库时公钥无效

css - Span 中的 Span,缺少 href 链接

ruby-on-rails - 动态配置 SMTP 设置时 ActionMailer 不发送邮件

PHPMailer,Gmail 的 SMTP connect() 失败错误

python - python/django 中的电子邮件白名单/黑名单

Linux 脚本检查进程是否启动