【问题标题】:Default Rails ActionMailer not delivering multipart emails correctly默认 Rails ActionMailer 未正确发送多部分电子邮件
【发布时间】:2015-04-08 11:55:20
【问题描述】:

我已经创建了,我认为是,使用 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 行为

【问题讨论】:

  • 默认行为是看是否有明文模板和html模板。如果两者都有,那么它会生成一封多部分电子邮件,每个部分都从相应的模板中设置。如果只有一个,则不会使其成为多部分。
  • 这正是我的想法。我们确实有纯文本和 html 版本,所以我假设它正在发送多部分电子邮件。但是,客户端似乎不会将其读取为 HTML,而是具有 text/plain 的内容类型。顺便说一句,我使用 Apple Mail 作为启用了 html 电子邮件的客户端。
  • 查看电子邮件的最佳方法是将其注销,然后在日志中查看。它应该在顶部附近有Content-Type: multipart/alternative; boundary=mimepart_<random_string_of_chars>,然后是几个部分,由--mimepart_<the_same_random_string_of_chars>分隔
  • 谢谢@MaxWillians。这就是我最终做的。由于某种原因,Content-Type 被设置为 text/pain,所以我必须在交付之前明确地将其设置为 multipart/alternative

标签: ruby-on-rails ruby actionmailer


【解决方案1】:

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

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

这立即解决了问题。我觉得很奇怪必须告诉 Rails。可能是我正在使用的版本中的错误?

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-10-11
      • 1970-01-01
      • 2014-12-31
      • 2011-08-11
      • 2011-10-06
      • 1970-01-01
      • 2016-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多