String.format的新行在控制台上工作,但不在电子邮件中

时间:2015-04-23 23:04:58

标签: java string email formatting

这就是我设置的属性

props.setProperty(EmailSender.MAIL_BODY,
                      "This is an automated email.%nZip Path: %s\nAdditional Text: %s\nThank you.");

我用它作为

  private String generateEmailBody(final EmailRequest diagnosticRequest) {
    final String bodyTemplate = getExistingProperty(MAIL_BODY);
    return String.format(bodyTemplate, diagnosticRequest.getZipFilePath(),
                      diagnosticRequest.getTextFromCustomer());
  }

当我运行测试时,我在控制台上看到如下

Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: 7bit

This is an automated email.
Zip Path: zipPath
Additional Text: text
Thank you.
.

但是当我收到电子邮件时,我将其视为

This is an automated email. Zip Path: zipPath Additional Text: text Thank you.

为什么不保留换行符?

我甚至尝试了%n%n%n,但没有一个

1 个答案:

答案 0 :(得分:1)

您的内容类型为Content-Type: text/html; charset=us-ascii

这意味着\n%n将无法在HTML渲染空间中工作,并且忽略新行(至少大部分都是这样),用<br>替换新行字符 - 这是html的新行

另一种解决方案是将您的文字包含在<pre>....</pre>标记中,这样可以保留原始格式

当然,您也可以将内容类型更改为text/plain