Les messages peuvent avoir plusieurs formats. Le plus courant est MIME qui permet à un email de contenir plusieurs "parties". Communément un HTML et une partie en texte brut. Cependant, vous ne pouvez pas contrôler les parties que l'e-mail contient réellement. Cela ne peut que l'expéditeur pour des raisons évidentes.
Vous pouvez cependant utiliser ruby pour obtenir la partie en texte brut s'il y en a une ou essayer d'en générer une représentation à partir de la partie HTML.
L'exemple condensé suivant pour obtenir la partie en texte brut d'un e-mail provient du MailHandler model et du POP3 module de Redmine (sous licence 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
Merci, je vais essayer! – Alex