使用Velocity模板发送邮件的问题
最近做一个监控项目,需要发送邮件预警,选择了使用Spring整合velocity 模板发送邮件,遇到了2个问题: 问题1:中文乱码变成了????,坑啊。 问题2:除了警告文本之外,想加上一张图片但是使用项目中的图片时一直显示不出来,后来发现,接收方邮件回去邮箱服务器中取相对路径的图片资源,导致显示不了,于是指向了互联网中的图片资源,才得以显示。
下面分享解决这两个问题的方案:
1.spring中整合Velocity的配置文件需要指定UTF-8:
代码语言:javascript复制<!--属性文件-->
<util:properties id="valueSettings" location="classpath:globalConfig.properties" />
<context:property-placeholder location="classpath:globalConfig.properties"/>
...
<!-- 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>
<bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
<property name="resourceLoaderPath" value="/WEB-INF/velocity/" />
<property name="configLocation" value="classpath:velocity.properties" />
</bean>
<bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
<!-- <property name="cache" value="true"/>
<property name="prefix" value="/WEB-INF/velocity/"/> -->
<property name="suffix" value=".vm"/>
<property name="contentType"><value>application/x-www-form-urlencoded;charset=UTF-8</value></property>
</bean>
<!-- velocityEngine 模板 配置结束-->
...
2.代码指定编码UTF-8
代码语言:javascript复制//模板发送
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);
}
3.模板文件sendMail.vm
代码语言:javascript复制<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<body>
<font size=4 face="Tahoma">使用Velocity模板发送邮箱示例</font>
<br/><br/>
<pre>
<font size=3 face="Georgia">Dear All, This is a Simple System Mail:</font>
<br/>
<font color=#ff3333 size=4 face="黑体">姓名:${userName}</font>
<font color=#ff3333 size=4 face="黑体">班级:${className}</font>
</pre>
<br/><br/>
<pre>
<font color=gray size=3 face="黑体">东陆之滇 信息技术中心</font>
<font color=gray size=2 face="黑体">Byron4j</font>
<font color=gray size=2 face="黑体">东陆之滇</font>
<a href="http://blog.csdn.net/zixiao217">东陆之滇的CSDN博客</a>
<font color=gray size=2>东陆之滇</font>
<font color=gray size=2>读书,写字,旅游,约会,做自己感到惬意的事</font>
<font color=gray size=2>每一个你不满意的现在,都有一个你没有努力的曾经</font>
</pre>
//显示图片,制定互联网中的某张图片
<img src="https://img-blog.csdn.net/20161021150809443"/>
</body>
</html>
4.globalConfig.properties文件
代码语言:javascript复制email.from=byron4j@126.com
email.subject=辅导员来了,别玩Dota了!!
email.template=/sendMail.vm