I’ve been struggling for a couple of days down with trying to attach a
pdf file to an email using ActionMailer on Windows. All the examples
on the web I could find instructed me to use “:body => File.read
()” to do the attachment. The attached file was always
corrupt. I attempted to simply copy the file using File.read
(), and the copy too yielded a truncated file.
What just now worked for me was a different body syntax. What works
is the following: “:body => File.new(fattach,‘rb’).read()”. I don’t
exactly understand the significance of the of the difference. Nor do
I understand why the original example above works in Linux but not
Windows, and why the latter example works in Windows. But it does
work. I just want to get discussion on the web in case someone else
encounters the same problem, and this provides an alternative
solution.
class Emailer < ActionMailer::Base
def report_attachment(to,cc,bcc,from,subject,body,fattach)
pp to,cc,bcc,from,subject,body,fattach
recipients to
cc cc
bcc bcc
from from
subject subject
body body
attachment :content_type => "application/pdf",
:content_disposition => "attachment",
:filename => File.basename(fattach),
:body => File.new(fattach,'rb').read()
end
end