使用包含一些PDF文件附件的actionmailer发送电子邮件的正确语法是什么?我正在使用Gmail for SMTP和TLS插件。这是我到目前为止所做的(并尝试过这方面的变化):
**lead_mailer.rb:**
def auto_response(lead)
recipients lead.email
subject "Information"
body :recipient => lead.first_name
from "me@mydomain.com"
attachment "application/pdf" do |a|
a.body = File.read(RAILS_ROOT + "/public/files/Datasheet.pdf")
end
attachment "application/pdf" do |a|
a.body = File.read(RAILS_ROOT + "/public/files/OtherSheet.pdf")
end
end
**lead_observer.rb:**
class LeadObserver < ActiveRecord::Observer
def after_save(lead)
mail = LeadMailer.create_auto_response(lead)
LeadMailer.deliver(mail)
end
end
问题在于它发送附件,但它们显示为“无名称”,即使在打开它们时它们显示正确。但是,电子邮件的正文根本没有出现。我确信我做的很简单,错了。
答案 0 :(得分:3)
好的,我走开了一会儿,回来再搜索了一下,得到了答案!
来自API:
如果已将任何附件或部件添加到电子邮件中,则不会执行隐式模板呈现。这意味着您必须手动将每个部分添加到电子邮件中,并将电子邮件的内容类型设置为multipart / alternative。
对于主邮件方法,我换出了body并添加了这个显式渲染。注意 - 我跳过了多部分/替代方案,它很有效,很可能是因为我发送的是纯文本电子邮件。
part :body => render_message('auto_response', :recipient => lead.first_name)
对于附件命名问题,这就是我所做的:
attachment "application/pdf" do |a|
a.body = File.read(RAILS_ROOT + "/public/files/OtherSheet.pdf")
a.filename = "Othersheet.pdf"
end