From: Gregory Brown Date: 2009-12-15T11:03:29+09:00 Subject: Re: ActionMailer PDF attachment and Windows On Mon, Dec 14, 2009 at 1:56 PM, dkmd_nielsen wrote: > 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. When using Ruby 1.8 on Windows (and everywhere on Ruby 1.9 -- for a different reason), if you want to work with binary files, File.read() is never safe. You need to tell Ruby you're working with a binary file by using the "rb" access mode. But you might consider doing it this way: File.open(filename, "rb") { |f| f.read } so that your file handle is closed properly. On Ruby 1.9, File.binread(filename) can also be used. -greg