java如何发送邮件以及使用Velocity模板解决模板文件中文乱码的问题

2023-05-04 20:24:27 浏览数 (2)

使用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

0 人点赞