Ruby IMAP 库不解码邮件主题
Posted
技术标签:
【中文标题】Ruby IMAP 库不解码邮件主题【英文标题】:Ruby IMAP library doesn't decode mail subject 【发布时间】:2011-04-27 21:24:54 【问题描述】:我的 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 库可以帮我?
【问题讨论】:
【参考方案1】: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
【讨论】:
谢谢,这很有用! 这段代码节省了我一天的 Google 搜索工作量。太棒了!【参考方案2】:使用 NKF 怎么样?
require 'nkf'
...
result = ... :subject => NKF.nkf("-mw", msg.subject), ...
-mw 表示 MIME 解码和 utf-8 输出
【讨论】:
以上是关于Ruby IMAP 库不解码邮件主题的主要内容,如果未能解决你的问题,请参考以下文章