我正在尝试在我的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
我在我的电子邮件收件箱中收到了以下内容:
--
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]>
跟着一长串ASCII字符
如果没有任何附件,那么邮件头信息就不会被发送,我只能在收件箱中看到“消息正文”部分。我怀疑我的mailer.rb中的attachment行的File.read()部分可能是罪魁祸首,但它指向了我服务器上的一个有效pdf文件,我可以通过浏览器访问它。日志仅显示使用了正确的参数发送了邮件,但它被发送为看起来像反编译文本或像在纯文本编辑器中打开pdf一样的东西。
mailer视图contact.html.erb只有:<%= @message %>
如果这有帮助。
您有什么想法我可能做错了什么吗?
谢谢。
更新:
显然,我需要在我的视图目录中同时拥有contact.erb和contact.html.erb。只需复制该文件并将其重命名即可。但是现在消息正文为空,只有附件显示出来。