ruby on rails发送带有多线体的电子邮件

时间:2015-05-13 18:32:43

标签: ruby-on-rails ruby

我正在使用Ruby on Rails发送电子邮件

subject = "test"
line1 = "first line"
line2 = "second line"
body = line1 + "\n" + line2
mail(to: ['myaddress@gmail.com'], subject: subject, body: body).deliver

我希望电子邮件正文以多行显示,因此我使用了“\ n”。但是我只有一行结合了line1和line2。任何人都知道如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

由于您未指定是以HTML格式发送还是以文本形式发送,还是两者都未发送;我只假设两者。

此外,我不确定为什么在他们到达您的电子邮件模板之前需要连接这些行。

通常在您的邮件程序中,您可以使用实例变量并在模板中访问它们,这些模板会自动组成正文。

邮件程序:

@line1 = "first line"
@line2 = "second line"
mail(to: ['myaddress@gmail.com'], subject: subject).deliver

邮件程序HTML ERB模板:

<%= @line1 %>
<br/>
<%= @line2 %>

HTML电子邮件

要在HTML电子邮件中获取新行,您需要将每行包装在段落标记(&lt; p&gt;,&lt; / p&gt;)中,或者在行之间使用换行符(&lt; br /&gt;)标记。

Rails有一个安全方便的功能(simple_format)来为你做这件事。

HTML ERB模板:

<%= simple_format(@some_multiline_text) %>

文字电子邮件

根据文本中的RFC 2282换行符,电子邮件由CRLF分隔(Ruby的默认值为LF - &#34; \ n&#34;)。你可以使用gsub简单地找到并用CRLF替换LF。

文本ERB模板:

<%= @some_multiline_text.gsub('\n', '\r\n')
<%= "\r\n" %>
Above is a line break.

清理html_safe

引用excellent article来避免共轨安全隐患:

  

因此,如果您在页面上显示用户生成的内容,请永远不要   将html_safe方法直接应用于它。首先,使用消毒   方法并指定允许的标记列表:通常是使用的标记   用于格式化,如b或i:

根据你的例子。

subject = "test"
line1 = "first line"
line2 = "second line"
body = sanitize(line1 + "\n" + line2, tags: %w(b strong em i)).html_safe
mail(to: ['myaddress@gmail.com'], subject: subject, body: body).deliver

答案 1 :(得分:0)

Amit Suroliya答案是正确的但是对于此操作,您应该使用.html.erb模板格式的电子邮件,您绝对应该使用.html_safe作为正文。如果您使用.text.erb格式的电子邮件,则只显示纯文本

答案 2 :(得分:-2)

试试这个 -

  body = "#{line1} <br> #{line2}"
  mail(to: ['myaddress@gmail.com'], subject: subject, body: body.html_safe).deliver