1 spring中整合Velocity的配置文件需要指定UTF-8
<!-- velocityEngine 模板 配置开始...-->
<bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
<!-- <property name="velocityProperties">
<value>
resource.loader=class
class.resource.loader.class=org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
</value>
</property> -->
<property name="velocityProperties">
<props>
<prop key="resource.loader">class</prop>
<prop key="class.resource.loader.class">
org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
</prop>
<prop key="velocimacro.library"></prop>
<prop key="input.encoding">UTF-8</prop>
<prop key="output.encoding">UTF-8</prop>
<prop key="default.contentType">application/x-www-form-urlencoded; charset=UTF-8</prop>
</props>
</property>
</bean>
2 代码指定编码UTF-8
//模板发送
public void sendConfirmationEmail(final StudentInfo order, final String className, final String[] to) {
MimeMessagePreparator preparator = new MimeMessagePreparator() {
public void prepare(MimeMessage mimeMessage) throws Exception {
//true-可以指定发送附件等,UTF-8设置邮件内容的编码(在收件人的邮箱中展示中文)
MimeMessageHelper message = new MimeMessageHelper(mimeMessage,true, "UTF-8");
message.setTo(to);
message.setFrom(emailFrom);
message.setSubject(emailSubject);
//无效,因为到邮件服务器上后,根据该路径取的是邮件服务器相对路径的文件
message.addInline("ynynEmail", new File("/ynynEmail.jpg"));
Map model = new HashMap();
model.put("userName", order.getuserName());
model.put("className", className);
String text = VelocityEngineUtils.mergeTemplateIntoString(
velocityEngine, emailTemplate, "UTF-8", model);
message.setText(text, true);
}
};
this.javaMailSender.send(preparator);
}
注意:
VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, emailTemplate, "UTF-8", model);
的第三个参数应该设置为 utf-8
更改这两处设置即可
参考资料:
1、java如何发送邮件以及使用Velocity模板解决模板文件中文乱码的问题
http://blog.csdn.net/zixiao217/article/details/53011601