4

Gmail アカウントに次の件名のメール メッセージが届きました。

「400, значение, значение」

メールを取得するために使用するコードは次のとおりです。

imap = Net::IMAP.new('imap.gmail.com', 993, true, nil, false)
imap.login(LOGIN, PASSWORD) 
imap.select("INBOX")
messages = imap.search(['ALL']).map do |message_id|
  msg =imap.fetch(message_id, "ENVELOPE")[0].attr["ENVELOPE"]
  result =  {:mailbox => msg.from[0].mailbox, :host => msg.from[0].host, :subject => msg.subject, :created_at => msg.date}
  imap.store(message_id, "+FLAGS", [:Deleted])
  result
end
imap.expunge()
imap.logout

msg.subject には次の値があります。

IMAP でデコードされていないようです。私は手動で行うべきですか、それとも IMAP ライブラリが私のためにそれを行うことができますか?

4

2 に答える 2

9

Mail::Encodings はここで本当に役に立ちます:

require 'mail'
test = "zwei plus =?ISO-8859-15?Q?zw=F6lf_ist_vierzehn?="
puts Mail::Encodings.value_decode(test)

戻り値

zwei plus zwölf ist vierzehn
于 2011-11-01T11:37:30.530 に答える
2

NKFを使ってみませんか?

require 'nkf'
...
result =  {... :subject => NKF.nkf("-mw", msg.subject), ...}

-mw は MIME デコードと utf-8 出力を意味します

于 2011-07-14T07:34:28.973 に答える