ActionMailer在一封电子邮件中发送两种格式

时间:2016-03-24 07:41:56

标签: ruby-on-rails ruby-on-rails-4 html-email actionmailer

这是一种非常奇怪的行为。我已在EmployeeMailer中为操作定义了两个模板。

employee_mailer/
    salary_slips.html.erb
    salary_slips.text.erb

以下是我正在使用的代码:

def salary_slips(salary_record)
  mail.attachments['#{@record.employee.name}'] = { mime_type: 'application/pdf', content: @record.create_pdf_file.render }
  mail to: @record.employee.official_email, subject: ['Salary Silp for', @date].join(' ')
end

问题是:在客户端,我收到一封以.text.erb部分开头的电子邮件,最后还包含.html.erb部分。

开发日志是研究员:

Rendered employee_mailer/salary_slips.html.erb (4.2ms)
Rendered employee_mailer/salary_slips.text.erb (0.5ms)
Rendered employee_mailer/salary_slips.text.erb (0.5ms)

我认为它应该只呈现.html.erb部分。有什么方法可以控制,只在一封电子邮件中发送.html.erb部分。

注意:

我已经使用format块以下列方式明确说明格式:

mail to: @record.employee.official_email, subject: ['Salary Slip for', @date].join(' ') do |format|
  format.html { render 'salary_slips' }
  format.text { render 'salary_slips' }
end 

3 个答案:

答案 0 :(得分:1)

这是ActionMailer的默认行为 - 请参阅http://guides.rubyonrails.org/action_mailer_basics.html#sending-multipart-emails

如果您只想呈现HTML部分,则必须删除.text.erb模板。

答案 1 :(得分:0)

   class UserMailer < ApplicationMailer
     default from: 'notifications@example.com'

     def welcome_email(user)
        @user = user
        @url  = 'http://example.com/login'
        mail(to: @user.email,
        subject: 'Welcome to My Awesome Site') do |format|
        format.html { render 'another_template' }
        format.text { render text: 'Render text' }
   end
 end

您可以选择回复格式。更多细节 http://guides.rubyonrails.org/action_mailer_basics.html

答案 2 :(得分:0)

发布答案很奇怪,但是当我将mail.attachments更改为attachments时,它就解决了。这是我改变的行:

attachments['#{@record.employee.name}'] = { mime_type: 'application/pdf', content: @record.create_pdf_file.render }

现在,它只向一个收件人发送HTML部分,而不是纯文本部分。