Библиотека Ruby IMAP не декодирует тему письма - PullRequest
4 голосов
/ 20 октября 2010

В моем аккаунте 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 у меня есть следующее значение "=? KOI8-R? B? MTAwLCDixc7ayc4sIDMwMDAgzMnU0s / X? ="

Кажется, что IMAP не расшифровал его. Должен ли я сделать это вручную или библиотека IMAP может ли это для меня?

Ответы [ 2 ]

9 голосов
/ 01 ноября 2011

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
2 голосов
/ 14 июля 2011

Как насчет использования NKF?

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

-mw означает MIME-декодирование и вывод utf-8

...