【问题标题】:Sending multipart emails with Rails: how to favor the HTML version over the plain text one?使用 Rails 发送多部分电子邮件:如何支持 HTML 版本而不是纯文本版本?
【发布时间】:2013-02-24 00:49:50
【问题描述】:

我按照官方指南设置了一个带有多部分视图的标准 Rails 邮件程序,如下所示:

mail(to: user.email, subject: "Welcome") do |format|
   format.html { render layout: 'my_layout' }
   format.text
end

本着明确和普遍的意图优先考虑html版本的邮件,结果发现,作为this article points out,在format.text之前调用format.html使得很多邮件客户端只显示文本消息的版本。在我的例子中,我用 Gmail 和 Mozilla Thunderbird 验证了(并努力解决了这个问题)。

是否有可靠的解决方案优先考虑 html 版本?

【问题讨论】:

  • 我不知道邮件有优先级。删除块时会发生什么?如果我们不需要传递任何特定细节,我们不会将块传递给 mail 方法。我们只提供 html 和文本模板,它们作为电子邮件的一部分发送。
  • 鉴于我需要该块,因为我需要为 html 版本指定布局(我刚刚编辑了问题以显示这一点),我只是做了一个快速测试,将布局直接应用于 html 消息并删除块:事实证明,如果没有块,它的工作方式是正确的(优先于 html 版本)。
  • 收件人而不是发件人决定他们喜欢哪种格式。如果您不希望他们拥有查看文本的选项,即使那是他们喜欢的,请不要创建文本版本。
  • 查看有关配置parts_order api.rubyonrails.org/classes/ActionMailer/Base.html 的文档也许将text/html 放在text/plain 之前会有所帮助
  • 似乎已在github.com/rails/rails/commit/… 中修复

标签: ruby-on-rails ruby-on-rails-3 email html-email


【解决方案1】:

到目前为止,我发现的唯一解决方案是将format.htmlformat.text 切换,以便将文本格式称为 html 格式之前。这与人们所期望的完全相反

【讨论】:

  • 首先放置 format.text 块正是人们所期望的,根据 MIME RFC 1341。参见 w3.org/Protocols/rfc1341/7_2_Multipart.html 上的 7.2.3 “通常,组成多部分/替代实体的用户代理应该放置身体部位按优先顺序递增,即首选格式排在最后。”
猜你喜欢
  • 2010-11-12
  • 1970-01-01
  • 2020-01-21
  • 1970-01-01
  • 1970-01-01
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
  • 2013-05-20
相关资源
最近更新 更多