2010-10-20 2 views
4

Я получил сообщение электронной почты с последующим предметом в моей сведенью Gmail:рубин IMAP не декодирует тему сообщения

«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

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

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

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

9

Mail :: Кодировки действительно полезно здесь:

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 
+0

Спасибо, это очень полезно! –

+0

Этот код сохранил мою однодневную попытку поиска Google. Awesoem! –

Смежные вопросы