Freemarker - 电子邮件主题模板中缺少特殊字符会导致电子邮件内容崩溃

时间:2012-11-07 12:01:33

标签: java spring email encoding freemarker

我正在与奇怪的错误作斗争。我使用单独的freemarker模板邮件主题和正文。它使用org.springframework.mail.javamail.JavaMailSender发送。只有包含一些特殊瑞典字符的模板才能在我的应用程序中运行(是的,你读得正确......而不是另一种方式)。如果我删除它,我的电子邮件内容崩溃。它包含:

MIME-Version: 1.0
Content-Type: text/html;charset=UTF-8
Content-Transfer-Encoding: 7bit

..
html code here
..

我的freemarker.properties文件

locale=sv_SE
classic_compatible=false

number_format=
date_format=yyyy-MM-dd
time_format=HH:mm
datetime_format=yyyy-MM-dd HH:mm
output_encoding=UTF-8

url_escaping_charset=UTF-8

auto_import=spring.ftl as spring
auto_include=
default_encoding=UTF-8
localized_lookup=true
strict_syntax=true
whitespace_stripping=true
template_update_delay=10

我试过用dos2unix工具转换主题文件。使用'find -bi subject.ftl'表明编码是us-ascii。增加了特殊字符 - utf-8。

这件事让我感到奇怪......

// SOLUTION: 使用:set bomb并在vim中保存文件。

1 个答案:

答案 0 :(得分:1)

根据@freakman的要求,我发表评论作为答案 - 因为它最终解决了问题:

BOM (Byte Order Mark) 附加到模板文件的开头,以确保始终将其解析为UTF-8模板。

作为参考,UTF-8的BOM是:

  • 十六进制:EF BB BF
  • ISO-8859-1编码
  • Java:byte[] bom = { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF};