我试图使用Ruby IMAP库("netimap")来获取邮件。我得到的邮件有html和纯文本,但我只需要纯文本......
我的代码是...
imap = Net::IMAP.new('XXX')
imap.authenticate('LOGIN', 'USER', "PASS") imap.examine('INBOX')
imap.search(['UNSEEN']).each do |message_id|
body = imap.fetch(message_id,'BODY[TEXT]')[0].attr['BODY[TEXT]']
puts body
end
在这里我得到
--57887f32df9433962df2d01c44487353c74c0f6d2b9721d30fc189fadae2内容类型:textplain;charset=UTF-8。
摘要:XXX描述。XXX。
--57887f32df9433962df2d01c44487353c74c0f6d2b9721d30fc189fadae2--。
但我只需要
摘要:XXX描述。XXX.
我怎么能不需要 "邮件 "就能得到呢?
祝贺
你最好在后续的问题中询问具体的零件号。fetch <msgno> body[<partnum>]
imap请求。 这将返回实际的mime部分,而不仅仅是带有MIME编码的正文。
例如, 我使用下面的循环来将消息返回到 mime_parts
(假设 @imap
是你已经建立的imap客户端)。)
new_msgs = @imap.uid_search('UNSEEN')
puts "Found #{new_msgs.size} new messages"
new_msgs.each do |msg_uid|
msgs = @imap.uid_fetch(msg_uid, ['BODY', 'FLAGS', 'ENVELOPE'])
raise "unexpected number of messages, count=#{msgs.size}" if msgs.size > 1
@imap.uid_store(msg_uid, '+FLAGS', [:Seen]).inspect
msg = msgs.first
body = msg.attr['BODY']
if body.media_type.eql?('MULTIPART')
mime_parts = []
body.parts.each.with_index do |part, idx|
body_part = "BODY[#{idx+1}]"
fetch_part = @imap.uid_fetch(msg_uid, body_part)
mime_parts << part.to_h.merge!({content: fetch_part.first.attr[body_part]})
end
else
fetch_text = @imap.uid_fetch(msg_uid, 'BODY[TEXT]')
mime_parts = [{
media_type: 'TEXT', subtype: 'PLAIN',
content: fetch_text.first.attr['BODY[TEXT]']
}]
end
end
然后你就可以在你的mime_parts上迭代,然后做任何你想做的事情。