Hola gente,
Estoy tratando ficheros adjuntos que me llegan por correo y todo
parecía solucionado hasta que me llega el primer email con un adjunto
con el filename codificado con UTF8:
–part283255-boundary-640451732-560270778
Content-Transfer-Encoding: base64
Content-Type: image/jpeg
Content-Disposition: attachment; filename="=?utf-8?B?SU1HMDAwOTkuanBn?="
El fichero originalmente se llama: IMG00099.jpg
Y gmail lo reconstruye correctamente.
Para reproducir el error abrir este .zip[1] y pasarle el contenido a
la siguiente secuencia de script/console:
[1]
http://fernandoguillen.info/ftp/mail_image_attach_from_bb.raw_mail.zip
mail = TMail::Mail.parse( File.read( “mail_image_attach_from_bb.raw_mail” ) )
=> #<TMail::Mail port=#TMail::StringPort:id=0x139a20a bodyport=nil>mail.attachments[0].original_filename
=> “=?utf-8?B?SU1HMDAwOTkuanBn?=”
El body lo descodifica correctamente:
–part283255-boundary-640451732-560270778
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset=“Windows-1252”
DQpCbGFja0JlcnJ5IGRlIG1vdmlzdGFyLCBhbGztIGRvbmRlIGVzdOlzIGVzdOEgdHUgb2ZpY2lu
QA==
mail.body
=> “\r\nBlackBerry de movistar, allí donde estés está tu
[email protected]: (unnamed)\n”
He visto esto mirando por google, pero no parece que le hayan dado
ninguna
solución:http://www.ruby-forum.com/topic/147214#650983
Cualquier sugerencia es bienvenida.
f.
PD:------------
He encontrado cosas como esta:
http://dev.rubyonrails.org/ticket/6758
Que intentan resolver el mismo problema pero en los subjects.
De ahí he extraído un poco de código para parchear la carga de
attachments de un email y he añadido esto cuando se carga el
original_filename:
fguillen: 2008-09-29: descodificando utf8
TODO: hay que hacer esto mejor, porque la comprobación del formato
no está fina
if file_name =~ /^=?utf-8/i
file_name = TMail::Unquoter.unquote_and_convert_to( file_name, ‘utf-8’
)
end
Fijarse en como se sabe si es utf-8… super cutre pero no encuentro
otro modo… por ahí[1] dicen que mirando el Content-Transfer-Encoding,
pero:
mail.content_transfer_encoding
=> nil
[1]
http://www.naffis.com/2006/8/14/receiving-emails-and-attachments-with-rails