Письма могут приходить в разных форматах.Наиболее распространенным является MIME, который позволяет электронной почте содержать несколько «частей».Обычно это HTML и текстовая часть.Однако вы не можете контролировать, какие части на самом деле содержит электронное письмо.Это может сделать только отправитель по понятным причинам.
Однако вы можете использовать ruby для получения части с открытым текстом, если она есть, или попытаться сгенерировать некоторое представление этого из части HTML.
следующий сжатый пример для получения текстовой части письма от модели MailHandler и POP3 модуля от Redmine (лицензируется по GPLv2).
def plain_text_body(email)
parts = email.parts.collect {|c| (c.respond_to?(:parts) && !c.parts.empty?) ? c.parts : c}.flatten
if parts.empty?
parts << email
end
plain_text_part = parts.detect {|p| p.content_type == 'text/plain'}
if plain_text_part.nil?
# no text/plain part found, assuming html-only email
# strip html tags and remove doctype directive
plain_text_body = strip_tags(email.body.to_s)
plain_text_body.gsub! %r{^<!DOCTYPE .*$}, ''
else
plain_text_body = plain_text_part.body.to_s
end
plain_text_body.strip
end
pop = Net::POP3.APOP(true).new(host,port)
pop.start(username, password) do |pop_session|
if pop_session.mails.empty?
puts "No email to process"
else
puts "#{pop_session.mails.size} email(s) to process..."
pop_session.each_mail do |msg|
message = msg.pop
plain_text = plain_text_body(message)
#
# Now do something with the plain text body
#
end
end
end