2010-10-20 49 views
4

我有郵件與按照我的Gmail戶頭主題:Ruby的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 4 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

謝謝你,這是很有用! – 2012-08-02 14:11:50

+0

此代碼保存了我一天的Google搜索工作。 Awesoem! – 2014-09-29 09:46:28