Velocity Engine忽略@字符?

时间:2012-09-25 22:41:38

标签: java velocity

我正在使用velocity v1.7发送带有JDK v1.7的电子邮件

我的代码如下:

VelocityContext context = new VelocityContext();
String name = "myname@yahoo.com";
context.put("userName", name);

在电子邮件模板(abc.vm)中,我使用了以下代码:

#if(${userName})        
    Dear ${userName},<br><br>
#end

不知何故,当我收到电子邮件时,它只会说

Dear  

而不是

Dear myname@yahoo.com

如果我将java代码更改为没有@字符的正确名称,则电子邮件会正确显示

Dear myName

任何人都可以告诉我为什么要跳过@字符,事实上,为什么它会跳过整个名字&amp;不包括在电子邮件中????

谢谢!

1 个答案:

答案 0 :(得分:2)

我试图重现,问题似乎在电子邮件发送的某个地方。速度本身就是这么好。

您可以通过将Velocity的结果写入输出,日志或文件来缩小此类问题,以便您在此时看到文本的内容。此外,调试还会显示速度返回以及发送电子邮件的位置是否存在特殊字符问题。

代码:         VelocityContext context = new VelocityContext();

    context.put("name", "Velocity@mycompany.com");

    String name = "myname@yahoo.com";
    context.put("userName", name);

    Template template = null;

    template = Velocity.getTemplate("test.vm");

    StringWriter sw = new StringWriter();

    try {
        template.merge(context, sw);
    } finally {
        sw.close();
    }
    System.out.println(sw);

模板:

Hello $name!

#if(${userName})        
    Dear ${userName},<br><br>
#end

结果输出:

Hello Velocity@mycompany.com!

    Dear myname@yahoo.com,<br><br>