JSP纯文本电子邮件不呈现换行符

时间:2017-02-02 15:01:43

标签: jsp email outlook line-breaks plaintext

我有一个联系表单,在提交后,将所有表单的数据发布到电子邮件操作中,然后以纯文本形式发送确认电子邮件。数据很好,但有些线路忽略了它们各自的换行符。

JSP:

<%@ page language="java" contentType="text/plain;" %><%@ page import="com.shared.Configuration" %><%@ taglib uri="/WEB-INF/jstl-core.tld" prefix="c" %>Contact Us Form: ${issue}

Name: ${name}
Email Address: ${emailAddress}
<c:if test="${not empty accessCode}">Access Code: ${accessCode}</c:if>
<c:if test="${not empty itemId}">Inventory Number: ${itemId}</c:if>
<c:if test="${not empty title}">Title: ${title}</c:if>
<c:if test="${not empty device_active}">User Device: ${device}</c:if>
<c:if test="${not empty os_active}">User Operating System/Version: ${operatingSystem}</c:if>
<c:if test="${not empty browser_active}">User Web Browser/Version: ${webBrowser}</c:if>
<c:if test="${hasError eq 'Y' or hasError eq 'N'}"><c:choose><c:when test="${hasError eq 'Y'}">Error Message: ${errorMessage}</c:when><c:otherwise>No Error message was present</c:otherwise></c:choose></c:if>
<c:if test="${not empty otherDetails}">Other Details: ${otherDetails}</c:if>
<c:if test="${not empty problemDetails}">Problem Details: ${problemDetails}</c:if>**

正如您所看到的,有很多IF条件,基本上,这些是作为节省空间的,如果用户没有输入这些字段中的任何信息,那么就不要放置它们在电子邮件中。

正如它所说的那样,Mac OS X Mail客户端可以很好地呈现电子邮件,就像所有基于Web的客户端一样。 Outlook是唯一一个表现不佳的人,并将其电子邮件呈现出来:

Outlook电子邮件结果:

Contact Us Form: Can't access the extra PlayBack+ features

Name: me
Email Address: jjozwowski@halleonard.com
Access Code: aqwsedrftgyhuj87
Inventory Number: 12345678
Title:Title: this track
User Device: Desktop
User Operating System/Version: Mac OS 10.9.5 User Web Browser/Version: Chrome 55 Error Message:
Other Details:no other details Problem Details:

用户操作系统,用户浏览器,错误消息和问题详细信息的换行符不到位。办公室里没有人有解决方案。那里的任何人都知道发生了什么?

1 个答案:

答案 0 :(得分:0)

我会在三个地方搜索问题:

1)

这可能是JSP中新行的非可打印字符的问题。

<c:if ...></c:if>\r\n
<c:if ...></c:if>\n
<c:if ...></c:if>\r

新的线路代码在不同的操作系统上有所不同:
Windows系统:\r\n
Unix:\n
更多信息:wikipedia

查看编辑器中不可见的字符。例如,在Notepad ++中单击¶ 如果存在任何差异,请统一它。

2)

检查EL变量是否包含新行字符的值 这可能是由于解析错误或使用未正确清理/修剪的字符串造成的。

如何评估EL ${operatingSystem}Mac OS 10.9.5\r
有新行字符吗? 如是。在设置变量之前修剪字符串。

3)

结合前两种可能性,trimDirectiveWhitespaces也可能会发生干扰。

检查部署描述符web.xml是否包含类似于以下的块:

<jsp-config>
  <jsp-property-group>
    <url-pattern>*.jsp</url-pattern>
    <trim-directive-whitespaces>true</trim-directive-whitespaces>
  </jsp-property-group>
</jsp-config>

如果trimDirectiveWhitespaces设置为true,这在许多情况下都有意义,您可以通过向JSP添加以下行来停用此特定情况:

<%@ page trimDirectiveWhitespaces="false"%>

在这里看一些例子: Remove Spacing between JSP variables