Я думаю, вам нужно указать имя файла
@file = File.read('c:/1.pdf')
@file.force_encoding('BINARY')
attachment "application/octet-stream" do |a|
a.body = @file
a.filename = "1.pdf"
end
И я бы использовал "application/pdf"
для PDF-файла.
EDIT:
Я посмотрел руководства по Rails 3 и не вижу ни одного примера с приведенным выше синтаксисом. Вместо этого они используют что-то вроде этого:
attachments['1.pdf'] = File.read('c:/1.pdf')
Или с дополнительными опциями:
attachments['1.pdf'] = {:mime_type => 'application/octet-stream',
:content => File.read('c:/1.pdf') }
Посмотрите здесь для получения дополнительной информации.
РЕДАКТИРОВАТЬ 2:
Я хочу ответить на ваши вопросы из комментариев. Я не использовал mailer в Rails 3, но я использую его в Rails 2.3.X, и вот некоторый код, который работает для меня:
attachment :content_type => "application/msword",
:body => File.read("files/word.doc"),
:filename => "word.doc"
attachment "application/pdf" do |a|
a.body = File.read("files/some_pdf.pdf")
a.filename = "umowa.pdf"
end
В Rails 3 почтовый API изменился. И вы должны использовать новый API. Btw. Вы также можете попробовать, если мой первый пример работает - он использует хэш вместо блока.
ДРУГОЕ РЕДАКТИРОВАНИЕ:
Я думаю, вы должны использовать mail
объект для отправки почты. Вот пример из Rails Guides:
def welcome_email(user)
@user = user
@url = user_url(@user)
mail(:to => user.email,
:subject => "Welcome to My Awesome Site")
end
и message
должны отображаться в виде почтовой программы. Я думаю, что у вас есть проблемы с этим, потому что вы смешиваете старый API почтовых программ с новым. Взгляните здесь , чтобы увидеть, как сделать это "по-новому" шаг за шагом.