Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 默认Rails ActionMailer无法正确传递多部分电子邮件_Ruby On Rails_Ruby_Actionmailer - Fatal编程技术网

Ruby on rails 默认Rails ActionMailer无法正确传递多部分电子邮件

Ruby on rails 默认Rails ActionMailer无法正确传递多部分电子邮件,ruby-on-rails,ruby,actionmailer,Ruby On Rails,Ruby,Actionmailer,我已经用rails创建了一个多部分电子邮件,但在发送到任何客户机时,它只会以纯文本显示,因此打印出标题和所有模板 def order_receipt(order) @order = order mail subject: "Order #{order.id}" end OrderMailer.order_receipt(Order.first).deliver 我在客户机中收到的电子邮件如下: ----==_mimepart_5525126014929_7e3f9b4c1fb98c5

我已经用rails创建了一个多部分电子邮件,但在发送到任何客户机时,它只会以纯文本显示,因此打印出标题和所有模板

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

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

但如果情况并非如此,则还可以将内容类型和参数一起传递给mail。 例如


奇怪的是,我必须指定内容类型为multipart:

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

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

默认行为是查看是否有纯文本模板和html模板。如果两者都有,那么它将生成一封多部分电子邮件,其中每个部分都来自相应的模板。如果只有一个,它就不能成为多部分。这正是我所想的。我们有纯文本和html版本,所以我假设它发送的是一封多部分电子邮件。但是,客户端似乎没有将其作为HTML读取,而是具有文本/纯文本的内容类型。顺便说一句,我使用Apple Mail作为启用html电子邮件的客户端。查看电子邮件的最佳方式是将其注销,然后在日志中查看。应具有
内容类型:多部分/可选;boundary=mimepart_u
靠近顶部,然后是几个部分,由
--mimepart_u
分隔,谢谢@MaxWillians。这就是我最后做的。由于某种原因,内容类型被设置为text/pain,因此在交付之前,我必须显式地将其设置为multipart/alternative
mail content_type: 'multipart/alternative', subject: "Order #{order.id}"