我使用的是Rails 2.3.11。我用以下方法创建了一个UserMailer:
def rsvp_created(user, rsvp, pdf_file)
setup_email(user)
content_type "multipart/mixed"
@subject << "Your RSVP for #{rsvp.ticket.holiday.title}"
@body[:rsvp] = rsvp
attachment :content_type => 'application/pdf',
:body => File.read(pdf_file),
:filename => "#{rsvp.confirmation_number}.pdf"
end
def rsvp_cancelled(user, rsvp)
setup_email(user)
content_type "text/html"
@subject << "Cancelled RSVP for #{rsvp.ticket.holiday.title}"
@body[:rsvp] = rsvp
@body[:holiday_url] = APP_CONFIG['site_url'] + holiday_path(rsvp.ticket.holiday)
end
protected
def setup_email(user)
@recipients = "#{user.email}"
@from = APP_CONFIG['admin_email']
@subject = "[#{APP_CONFIG['site_name']}] "
@sent_on = Time.now
@body[:user] = user
end
rsvp_cancelled工作正常并正确发送电子邮件。但是具有附件的rsvp_created电子邮件无法正常工作。它发送带有附件的电子邮件但不呈现任何文本。任何人之前都遇到过这个问题,或者知道如何解决它?
由于
答案 0 :(得分:2)
使用Rails 2.x,出于某种原因,您需要定义HTML的所有部分。
def rsvp_created(user, rsvp, pdf_file)
setup_email(user)
content_type "multipart/mixed"
@subject << "Your RSVP for #{rsvp.ticket.holiday.title}"
part :content_type => 'multipart/alternative' do |copy|
copy.part :content_type => 'text/html' do |html|
html.body = render( :file => "rsvp_created.text.html.erb",
:body => { :rsvp => rsvp } )
end
end
attachment :content_type => 'application/pdf',
:body => File.read(pdf_file),
:filename => "#{rsvp.confirmation_number}.pdf"
end
值得庆幸的是,Rails 3.x中的情况并非如此。
答案 1 :(得分:0)
我试图做同样的事情,但遵循道格拉斯上面的回答,不断受到损坏的PDF附件。我终于能够通过以二进制模式读取pdf文件来解决问题:
attachment :content_type => 'application/pdf',
:body => File.open(pdf_file, 'rb') {|f| f.read}
:filename => "#{rsvp.confirmation_number}.pdf"
答案 2 :(得分:0)
我能够使用道格拉斯的答案,但也能让它在一条线上工作。我使用的是模板,但这也适用于将“rsvp”替换为render_message方法。
part :content_type => "text/html",
:body => render_message("template_name", { :symbol => value } )