前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java如何发送邮件以及使用Velocity模板解决模板文件中文乱码的问题

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

作者头像
青山师
发布2023-05-04 20:24:27
6120
发布2023-05-04 20:24:27
举报

使用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
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-11-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用Velocity模板发送邮件的问题
    • 1.spring中整合Velocity的配置文件需要指定UTF-8:
      • 2.代码指定编码UTF-8
        • 3.模板文件sendMail.vm
          • 4.globalConfig.properties文件
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档