Мое приложение хранит много файлов XML. Фоновое задание периодически отправляет некоторые из этих файлов XML в определенный почтовый ящик. Код почтовой программы очень прост:
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
Однако по какой-то причине эти XML-данные повреждены при передаче: первый разрыв строки добавляется в столбец 987, а следующий добавляется в столбец 990. После каждого разрыва вставляется пробел. Я думаю, что картина говорит сама за себя:
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
Я пытался дозвониться до File.read
на rails console
, все работает нормально, разрывы строк не добавляются. Поэтому я предполагаю, что ошибка должна лежать на ActionMailer
. Любые советы?
Изменить для уточнения: Большая часть XML-документа лежит на большой одной строке. Я не могу изменить его, так как XML имеет цифровую подпись - любое изменение, включая добавление разрывов строк и отступов, нарушает цифровую подпись.