2010-11-02 2 views

Répondre

2

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 
+0

Merci, je vais essayer! – Alex

Questions connexes