首页 > 解决方案 > System.lineSeparator() 在 Linux 环境下不起作用

问题描述

我正在使用 Java 8 和 Spring API 来编写邮件正文,如下所示。

        StringBuilder emailTemplateForNewPassword = new StringBuilder();
        emailTemplateForNewPassword.append("Dear User,");

        emailTemplateForNewPassword.append(System.lineSeparator());
        emailTemplateForNewPassword.append(System.lineSeparator());

        emailTemplateForNewPassword.append("Sample Mail.");

        emailTemplateForNewPassword.append(System.lineSeparator());
        emailTemplateForNewPassword.append(System.lineSeparator());

        emailTemplateForNewPassword.append("Yours Faityfully,");
        emailTemplateForNewPassword.append(System.lineSeparator());
        emailTemplateForNewPassword.append("ABC.Com");
        emailTemplateForNewPassword.append(System.lineSeparator());
        emailTemplateForNewPassword.append("0094778999658");

预期结果:

亲爱的用户,

样本邮件。

此致,
ABC.Com
0094778999658

实际结果:

亲爱的用户,

样本邮件。

此致,ABC.Com 0094778999658

我不确定为什么最后 3 行出现在同一行,即使我使用的是System.lineSeparator().

我已经尝试过"\r\n",但没有运气。

任何人都可以提出什么问题吗?

我知道还有其他与此相关的问题,但没有一个能解决我的问题。在我找到答案之前,请不要轻视这个问题。

标签: javaspring

解决方案


RFC 5322描述了电子邮件的标准。

根据第 2.1 节

消息被分成多行字符。一行是由两个字符回车和换行分隔的一系列字符;即,回车 (CR) 字符(ASCII 值 13)紧跟换行 (LF) 字符(ASCII 值 10)。(回车/换行对在本文档中通常写为“CRLF”。)

您需要\r\n明确使用来分隔行。

您不能依赖System.lineSeparator(),因为这取决于 JVM 配置;默认情况下,该配置仅\n在 Linux 上使用。


推荐阅读