Mi aplicación almacena una gran cantidad de archivos XML. Un trabajo en segundo plano envía periódicamente algunos de esos archivos XML a un buzón específico. El código de anuncio publicitario está muerto-simple:Saltos de línea inesperados al enviar archivos adjuntos XML utilizando ActionMailer
class MailSender < ActionMailer::Base
default :from => AppConfig.mail_from
smtp_settings :address => AppConfig.smtp_host,
:username => AppConfig.smtp_user,
:password => AppConfig.smtp_pass
def send_xml(record)
f = record.filename.gsub("\\", "/") # converts \ to/
f_short = arq.gsub(/.*\//, "") # extracts only the filename
f_phys = "#{AppConfig.xml_root}#{arq}" # builds the physical filename
headers["Return-Receipt-To"] = AppConfig.return_receipt
attachments[f_short] = File.read(f_phys) if File.exists?(f_phys)
mail :subject => "...",
:to => AppConfig.mail_to
end
end
Sin embargo, por alguna razón, los XML están consiguiendo dañado en la transmisión: el primer salto de línea se agrega a la columna 987, y se añaden lo siguiente en la columna 990. Después de cada romper, se inserta un espacio. Creo que la imagen vale por sí mismo:
col 1 col 990
|.................................................|
<?xml version="1.0" ... </IE><IM>321505493301<
/IM><CNAE>4744001< ... 00</pCOFINS><vCOFINS>0.00
</vCOFINS></COFINS ... /prod><imposto><ICMS><ICM
S40><orig>0</orig> ... <infAdic><infCpl>Permite
intenté llamar a mí mismo en File.read
rails console
, que funciona bien, no se añaden los saltos de línea. Así que supongo que el error debería estar en el ActionMailer
. ¿Algun consejo?
Editar para la aclaración: La mayor parte del documento XML se encuentra en una línea grande y única. No puedo cambiarlo, ya que el XML está firmado digitalmente: cualquier cambio, incluidos los saltos de línea y la sangría, rompe la firma digital.