System.lineSeparator()在Linux环境中不起作用

时间:2019-05-13 10:35:55

标签: java spring

我正在使用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

即使使用System.lineSeparator(),我也不确定为什么最后三行都在同一行。

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

谁能建议出什么问题了?

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

1 个答案:

答案 0 :(得分:4)

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

Section 2.1

  

消息分为字符行。一条线是一系列      以两个字符回车符分隔的字符      和换行;即回车(CR)字符(ASCII      值13)后紧跟换行(LF)字符(ASCII      值10)。 (回车/换行符对通常用      该文档称为“ CRLF”。)

您需要显式使用\r\n来分隔行。

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