J'ai une petite application qui traite les emails téléchargés à partir d'un serveur imap avec fetchmail. Le traitement consiste à trouver des pièces jointes codées en base64 avec un fichier XML à l'intérieur.Ruby TMail taille-limite sur le corps?
Voici le code (un peu dépouillé):
def extract_data_from_mailfile(mailfile)
begin
mail = TMail::Mail.load(mailfile)
rescue
return nil
end
bodies_found = []
if mail.multipart? then
mail.parts.each do |m|
bodies_found << m.body
end
end
## Let's parse the parts we found in the mail to see if one of them
## looks XML-ish. Hacky but works for now.
## was XML.
bodies_found.each do |body|
if body =~ /^<\?XML /i then
return body
end
end
return nil # Nothing found.
end
Cela fonctionne très bien, mais sur de gros fichiers XML (typiquement> 600k mailfiles), cette pause.
>> mail.parts[1].body.size
=> 487424 <-- should have been larger - doesn't include the end of the file
Le décodage Base64 ne se fait pas automatiquement non plus. Mais c'est lorsque je tente de lancer manuellement decode:
>> Base64::decode64(mail.parts[1].body)
[...] ll="SMTP"></Sendt><Sendt"
Cela fait partie du fichier XML, mais il a été coupé.
Un moyen d'obtenir l'intégralité de la pièce jointe? des conseils?