默认Rails ActionMailer无法正确发送多部分电子邮件

时间:2015-04-08 11:55:20

标签: ruby-on-rails ruby actionmailer

我创建了,我认为是一个使用rails的MultiPart电子邮件,但在交付给任何客户端时,它只以纯文本显示,因此打印出标题和所有模板。

def order_receipt(order)
  @order = order
  mail subject: "Order #{order.id}"
end

OrderMailer.order_receipt(Order.first).deliver

我在客户收到的电子邮件是这样的:

----==_mimepart_5525126014929_7e3f9b4c1fb98c525c2 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: etc...

然后只是框和文本应该是样式内容。

我是否需要在邮件中明确设置格式,如下所示:

def order_receipt(order)
  @order = order
  mail subject: "Order #{order.id}" do |format|
    format.text
    format.html
  end
end

因为我认为这是默认的ActionMailer行为

2 个答案:

答案 0 :(得分:3)

奇怪的是我必须指定内容类型是多部分:

mail content_type: 'multipart/alternative', subject: "Order #{order.id}"

这立即解决了这个问题。我发现Rails必须被告知这一点非常奇怪。可能在我使用的版本中有错误吗?

答案 1 :(得分:2)

是的,如果您有相同操作的不同模板,Action Mailer会自动发送多部分电子邮件。

但如果不是这种情况,那么您也可以将content-type和参数一起传递给mail。 例如。

def order_receipt(order)
  @order = order
  mail(content_type: "text/html", subject: "Order #{order.id}")
end