我正在使用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。任何人都知道如何解决这个问题?
答案 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