Mon application stocke beaucoup de fichiers XML. Un travail d'arrière-plan envoie périodiquement certains de ces fichiers XML à une boîte aux lettres spécifique. Le code Mailer est mort simple:Les sauts de ligne inattendus lors de l'envoi de pièces jointes XML à l'aide d'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
Cependant, pour une raison quelconque, les XML sont de corrompu sur la transmission: la première saut de ligne est ajouté à la colonne 987, et les éléments suivants sont ajoutés à la colonne 990. Après chaque pause, un espace est inséré. Je pense que l'image dit lui-même:
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
J'ai essayé d'appeler moi-même sur File.read
rails console
, il fonctionne très bien, pas de sauts de ligne sont ajoutés. Donc, je suppose que l'erreur devrait se trouver sur le ActionMailer
. Des conseils?
Modifier pour plus de précisions: La plupart des documents XML se trouvent sur une grande ligne unique. Je ne peux pas le changer, car le XML est signé numériquement - tout changement, y compris l'ajout de sauts de ligne et d'indentation, casse la signature numérique.