默认 Rails ActionMailer 未正确传送多部分电子邮件

Default Rails ActionMailer not delivering multipart emails correctly

我已经创建了,我认为是,使用 rails 的多部分电子邮件但是在发送给任何客户时它只以纯文本显示因此打印出 headers 和所有模板化。

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 行为

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

但如果不是这种情况,那么您也可以将内容类型和参数一起传递给邮件。 例如

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

奇怪的是,我不得不指定内容类型是多部分的:

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

这立即解决了问题。我觉得很奇怪 Rails 必须被告知这一点。我使用的版本可能有错误?