【问题标题】:Rails ActionMailer adds carriage return (=0D) to end of every line in htmlRails ActionMailer 将回车 (=0D) 添加到 html 中每一行的末尾
【发布时间】:2019-03-25 10:18:41
【问题描述】:

我的 ActionMailer 在每一行的末尾添加一个回车符:

<!DOCTYPE html>=0D
<html>=0D
<head>=0D
...
this is stuff=0D
=0D
This intro has some content in it.=0D
=0D
blah.=0D
=0D

我的邮件在previewhost/rails/mailers/user_mailer/periodic_digest.html(以及mailcatcher)中呈现得非常好,但是当我通过Mailgun发送邮件时,我的文本之间出现了双倍的行距。

app/mailers/user_mailer.rb:periodic_digest

m = mail(from: 'blah', to: 'me')
puts m.html_part.body.decoded

我确实得到了格式正确的 html。

如何在不将回车符 =0D 附加到每一行的情况下发送我的 html?

【问题讨论】:

    标签: ruby-on-rails actionmailer


    【解决方案1】:

    这个isn't an error 在 Rails 的部分。 Mailgun 只是 handles it in an undesirable manner

    回车用于在引用的可打印编码文本中强制换行。如果您要发送多部分或纯文本电子邮件,RFC 5322(以及之前的 2822 和 822)指定您必须在不超过 998 个字符处换行。出于实际目的,大多数电子邮件客户端都包含接近 70 个字符。

    为了插入可见的换行符,您需要使用回车后跟换行符,您可能习惯于看到表示为\r\n。这与您在代码或文本文件中使用的典型 unix 样式的换行符(只是换行符)形成鲜明对比。

    【讨论】:

    • 有一段时间,mail gem 从 2.7.0 到 2.7.1 的更新似乎在每一行都添加了 CR,但似乎只是编码。如果不明确删除它们,除了希望 Mailgun 更改它们的渲染之外,找不到其他解决方案。
    【解决方案2】:

    通过删除电子邮件文本中的特殊字符(例如“ñ”和重音符号),我能够避免每行末尾的“= 0D”。

    【讨论】:

      【解决方案3】:
      <%=  (@mails.html_part.body.decoded.to_s.split).join(" ").html_safe %>
      

      【讨论】:

        【解决方案4】:

        在我的情况下,这些行的测试用例失败:

        <td class="quantity">1</td>
        <td>Programming Ruby 1.9</td>
        

        开:

        assert_match /<td[^>]*>1<\/td>\s*<td>Programming Ruby 1.9<\/td>/, mail.body.encoded
        

        所以失败的地方在这些行之间,因为 \s 没有处理 puts 显示的新行:

        <td class=3D"quantity">1</td>=0D
        <td>Programming Ruby 1.9</td>=0D
        

        所以解决方案是使用:

        mail.html_part.body.decoded.to_s
        

        我希望这对某人有所帮助。

        【讨论】:

          猜你喜欢
          • 2015-03-20
          • 2011-01-05
          • 1970-01-01
          • 2014-10-18
          • 1970-01-01
          • 2015-05-27
          • 1970-01-01
          • 2015-02-16
          • 2013-04-05
          相关资源
          最近更新 更多