使用Velocity模板生成的电子邮件中的绝对URL

时间:2015-03-30 15:06:45

标签: java spring email spring-mvc velocity

我正在使用需要使用Velocity模板生成电子邮件的Spring Web应用程序。我在Spring配置中有以下配置:

<bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
    <property name="resourceLoaderPath" value="/WEB-INF/velocity/,classpath:/velocity" />
</bean>

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    <property name="host" value="smtp.mycompany" />
    <property name="port" value="25" />
    <property name="javaMailProperties">
        <props>
            <prop key="mail.mime.charset">UTF-8</prop>
            <prop key="mail.transport.protocol">smtp</prop>
        </props>
    </property>
</bean>

<bean id="mailer" class="com.mycompany.utils.EmailManager">
    <constructor-arg name="mailSender" ref="mailSender" />
    <constructor-arg name="velocityEngine" ref="velocityEngine" />
</bean>

此设置运行良好,所有上下文数据都已正确解析以生成电子邮件。但是,一个变量 $link.contextURL 无法解决,我需要这个,因为电子邮件包含一个返回Web应用程序的绝对URL。我可以对URL进行硬编码,但这显然不是DEV / UAT / PROD环境中的无缝连接。我可以在提供给模板的上下文数据中包含URL,但我想利用流行的 LinkTool Velocity扩展,这允许我利用$link.contextURL变量。有什么方法可以促进这个吗?

1 个答案:

答案 0 :(得分:3)

在评估邮件模板时,速度没有http请求上下文,没有它就无法计算完整的URL。我担心您必须将URL包含在上下文数据中,或者找到一种方法来为评估邮件模板提供http请求上下文。