使用Rails发送多部分电子邮件:如何优先选择HTML版本而不是纯文本版本?

9
我使用官方指南设置了标准的 Rails 邮件发送器,并使用多部分视图,如下所示:

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

明确并普遍的意图是优先使用消息的html版本,但事实证明,正如这篇文章所指出的,在调用format.text之前调用format.html会导致许多邮件客户端只显示消息的文本版本。在我的情况下,我验证了(并且苦苦挣扎)与Gmail和Mozilla Thunderbird都有这个问题。

是否有可靠的解决方案来优先使用html版本?


1
我不知道邮件发送中有优先级。如果移除该块会发生什么?如果我们不需要传递任何特定的细节,就不会向邮件方法传递块。我们只提供 HTML 和文本模板,并将其作为电子邮件的一部分发送。 - jvnill
考虑到我需要这个块来指定 HTML 版本的布局(我刚刚编辑了问题以展示这一点),所以我进行了一个快速测试,直接将布局应用于 HTML 消息并删除该块:结果发现,在没有该块的情况下它按照正确的方式工作(给予 HTML 版本优先权)。 - Darme
接收者而非发送者决定他们喜欢的格式。如果您不希望他们即使喜欢文本也无法查看文本版本,请不要创建文本版本。 - tripleee
1
请查看有关配置 parts_order 的文档 http://api.rubyonrails.org/classes/ActionMailer/Base.html 也许在 text/plain 之前加上 text/html 会有所帮助。 - Arctodus
1
看起来已经在 https://github.com/rails/rails/commit/9cf33b55f39779b98604e1652affc2c64873dd9b 得到解决。 - TuteC
1个回答

7
到目前为止,我找到的唯一解决方案是将format.html替换为format.text,以便先调用文本格式,然后再调用HTML格式。这正好与人们所期望的相反。

2
format.text块放在最前面正是符合MIME RFC 1341的预期。请参阅http://www.w3.org/Protocols/rfc1341/7_2_Multipart.html上的7.2.3。“通常,组成multipart/alternative实体的用户代理应该按照偏好顺序递增地放置各个正文部分,也就是说,首选格式应该放在最后。” - Jarrod Carlson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接