我尝试使用Ruby IMAP库(“ net / imap”)来获取电子邮件。我收到带有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内容类型:text / plain; charset = UTF-8
摘要:XXX说明:XXX。
-57887f32df9433962df2d01c44487353c74c0f6d2b9721d30fc189fadae2-
但是我只需要
摘要:XXX说明:XXX。
我如何在不需要“邮件”的情况下获取它
致谢
答案 0 :(得分:0)
最好在后续的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并对它们进行任何操作。