Rails ActionMailer附件显示为乱码文本

ape*_*ure 4 ruby-on-rails actionmailer

我正在尝试在我的一个rails应用程序中发送pdf附件,但附件是作为文本而不是正确的pdf.

我的邮件看起来像这样:

class Notifications < ActionMailer::Base
  def contact(email_params, sent_at = Time.now)
    subject "" << email_params[:subject]
    recipients "" << email_params[:client]
    from "#{email_params[:name]} <#{email_params[:address]}>"
    attachments['invoice.pdf'] = File.read("#{Rails.root.to_s}/public#{email_params[:attach]}") unless email_params[:attach].blank?
    sent_on sent_at
    body :message => email_params[:body], :sender_name => email_params[:name]
  end
end
Run Code Online (Sandbox Code Playgroud)

我在邮件收件箱中收到的内容:

--
Date: Thu, 23 Feb 2012 13:50:58 -0800
Mime-Version: 1.0
Content-Type: text/plain;
charset=UTF-8
Content-Transfer-Encoding: 7bit
Content-ID: <[mailserver]>

Message Body

--
Date: Thu, 23 Feb 2012 13:50:58 -0800
Mime-Version: 1.0
Content-Type: application/pdf;
charset=UTF-8;
filename=invoice.pdf
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename=invoice.pdf
Content-ID: <[mailserver]>
Run Code Online (Sandbox Code Playgroud)

接下来是一串很长的ascii字符

没有任何附件,该头信息不会被发送,我只是在我的收件箱中获得"消息正文"部分.我怀疑mailer.rb中附件行的File.read()部分是某种罪魁祸首,但它指向我服务器上的有效pdf文件,我可以通过浏览器访问该文件.日志只表示邮件是使用正确的参数发送的,但它是以反编译文本的形式发送的,或者如果您在纯文本编辑器中打开pdf.

邮件程序视图contact.html.erb很简单:<%= @message %>如果有帮助的话.

知道我可能做错了什么吗?

谢谢.

更新:

显然,我需要contact.erb,以及我的views目录中的contact.html.erb.只是复制文件,并重命名它工作.但是,现在邮件正文为空.只显示附件.

Kar*_*lis 6

仅供参考,我遇到了同样的问题,在我的情况下,解决方案是交换附件和邮件行.首先附上,然后打电话给邮件.

错误

def pdf_email(email, subject, pdfname, pdfpath)
  mail(:to => email, :subject => subject)
  attachments[pdfname] = File.read(pdfpath)
end
Run Code Online (Sandbox Code Playgroud)

def pdf_email(email, subject, pdfname, pdfpath)
  attachments[pdfname] = File.read(pdfpath)
  mail(:to => email, :subject => subject)
end
Run Code Online (Sandbox Code Playgroud)