2

nu7'hatch/gmail gem を使用して Gmail アカウントにアクセスし、電子メールを取得しています。Dateと をSubject正しくつかむことができますが、FromとについてBodyはこれらの文字も取得し、単純にテキストを取得することはできません:

から:

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