2

我正在使用nu7'hatch/gmail gem 进入我的 Gmail 帐户并获取电子邮件。我可以正确地抓住Dateand Subject,但是对于FromandBody我也得到了这些字符,我不能简单地得到文本:

从:

--- - !ruby/struct:Net::IMAP::Address name: [NAME_OF_SENDER_IS_HERE] route: mailbox: [USERNAME_OF_SENDER_IS_HERE] host: gmail.com

身体: --- !ruby/object:Mail::Body boundary: preamble: epilogue: charset: US-ASCII part_sort_order: - text/plain - text/enriched - text/html parts: !ruby/array:Mail::PartsList [] raw_source: [MESSAGE_GOES_HERE] encoding: 7bit

没有这些字符,有什么方法可以正确获取 From 和 Body 文本?

4

2 回答 2

3

我发现的一种解决方法是使用 Net::IMAP。

请注意,所需的电子邮件From已完成mail.from[0]

imap = Net::IMAP.new('imap.gmail.com', 993, usessl = true, certs = nil, verify = false)
imap.login(USERNAME, PASSWORD)
imap.select('Inbox')

imap.search(["ALL"]).each do |message_id|
  emails = imap.fetch(message_id,'RFC822')[0].attr['RFC822']
  mail = Mail.read_from_string emails
  @email = Email.create(:subject => mail.subject, :message => mail.body.decoded, :sender => mail.from[0], :date => mail.date)
end

imap.disconnect
于 2013-02-03T16:58:20.930 回答
0

你可以做类似的事情

此行返回完整的结构:

gmail.inbox.find(subject: "yoursubject").first.envelope

...在结构上,您可以:

gmail.inbox.find(subject: "yoursubject").first.envelope.reply_to[0].mailbox
gmail.inbox.find(subject: "yoursubject").first.envelope.reply_to[0].name
gmail.inbox.find(subject: "yoursubject").first.envelope.reply_to[0].host

...然后进行操作以组合成一个字符串,该字符串将被评估为:

name <sample@sample.com>
于 2015-08-20T20:22:27.743 回答