我有一个AngularJs + Rails。
我有一个带有文本字段的表单,用户可以用断线写出任何文本。当用户提交表单时,存储在db中并通过电子邮件发送给其他用户的消息。发送的电子邮件应保持中断行。
关键是消息的格式在生产中工作得很好。然而,它已经停止了在发展方面的工作。显然,我们还没有在代码中进行影响这一点的特定更新,但是我们正在将Rails和mysql迁移到一个正在开发的更新版本。因此,我想知道这是否与此有关,然而,我无法确切地看到问题出在哪里。
请举例说明这两种不同的行为:
我们将在两个环境中发送相同的示例消息,因此在我们的textarea中我们编写:
This is a test message
with a some break lines.
Lorem ipsum whatever.这是发送到我的mysql数据库中的varchar字段中存储的文本消息:This is a test message\n\nwith a some break lines.\n\nLorem ipsum whatever.
这是我可以看到存储在开发和生产数据库中的文本:This is a test message with a some break lines. Lorem ipsum whatever.
这是用于在开发和生产中发送电子邮件的模板(此处没有更改):<p class="p1" style="white-space: pre-wrap;"><%= @offer.message_pre_offer %></p>
这是我在开发中通过电子邮件发送消息时看到的日志:
<p class=3D"p1" style=3D"white-space: pre-wrap; margin: 1em 0; padding: 0=
; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; color: #606=
060; font-family: Source Sans Pro, Helvetica Neue, Helvetica, Arial, sans=
-serif; font-size: 15px; line-height: 150%; font-weight: 300;" align=3D"l=
eft">This is a test message=0D
=0D
with a some break lines.=0D
=0D
Lorem ipsum whatever.</p>=0D
<style>=0D不幸的是,我无法在生产中看到这个详细的日志,因为调试级别没有设置为debug。
当我在webmail中打开测试用户在gmail中获得的电子邮件时,我可以在Chrome的dev tools中看到以下代码:
发展工作不对:
<p style="white-space:pre-wrap;margin:1em 0;padding:0;color:#606060;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:15px;line-height:150%;font-weight:300" align="left">This is a test message
with a some break lines.
Lorem ipsum whatever.</p>这就是它在gmail网络邮件中的样子:

生产运转良好:
<p style="color:#606060;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:15px;font-weight:300;line-height:150%;margin:1em 0;padding:0;text-align:left;white-space: pre-line;" align="left">This is a test message
with a some break lines.
Lorem ipsum whatever.</p>这就是它在生产中的样子:

也许这根本没有关系,买我的rails版本是:
8.0.18
发布于 2020-01-23 07:14:12
这很可能解释额外的垂直间距:
窗口使用CR作为换行符。
Unix系统使用LF。
Macintosh使用CR。
当您在期望不同形式的系统上显示一种断行形式时,可能会出现混乱。
也许“正确”的设计只使用LF,然后根据需要根据目标机器进行更改或扩展。请注意,<br>是与HTML等效的,其中CR和LF只是“空白”。
还请参阅<pre>和PHP的NL2BR()以及可能的其他内容。
发布于 2020-01-23 09:18:43
您使用什么模板引擎来生成电子邮件,并进行CSS的内联?
我怀疑这与这里的问题有关,因为用于开发和生产的style输出与您提供的示例不同。
特别是,开发有white-space: pre-wrap,生产有white-space: pre-line。这一点很重要,因为pre-line会将多个换行符压缩成一个换行符,而pre-wrap将保留所有换行符。
这有望解释为什么您在生产和开发中看到不同的行为,但您可能希望保留用户输入的所有空白。在这种情况下,您可以通过将实例\r和\r\n替换为\n来确保一致的间隔。
例如user_input.gsub(/\r\n?/, "\n")
https://stackoverflow.com/questions/59824289
复制相似问题