2

我有各种表示电子邮件的 Velocity 模板文件。我正在寻找一种优雅的方式来允许模板文件输出消息的主题行以及内容。我考虑了几个选项:

  1. 使输出的第一行类似于“主题:Bla”,然后在 Java 中将其删除。我拒绝了这种方法,因为从 Java 执行花哨的字符串操作正是我试图通过首先使用 Velocity 来解决的问题。

  2. 在 Velocity 宏中的某些代码的映射中抛出一个可设置的对象以调用 setter。优点:很简单。缺点:我不喜欢从 Velocity 设置外部对象的想法,即使只是一种输出形式。不过,这可能是一种不合理的不喜欢。

  3. 创建一些自定义速度命令,如#setSubjectLine。优点:更优雅。缺点:将作为有效命令应用于我的所有模板,无论它们是否是电子邮件。

  4. 为主题行和电子邮件的其余部分设置单独的模板文件。优点:根本没有什么特别的技巧!缺点:并非所有电子邮件逻辑都位于同一个地方。

  5. 我不知道一些很酷的速度技巧。

  6. ???

所以我该怎么做?你有5或6的建议吗?我应该选择 1、2、3 或 4 的原因?

4

2 回答 2

3

2) 在 Velocity 宏中的某些代码的映射中抛出一个可设置的对象,以调用 setter。优点:很简单。缺点:我不喜欢从 Velocity 设置外部对象的想法,即使只是一种输出形式。不过,这可能是一种不合理的不喜欢。

这是我的方法,尽管一开始我也有类似的疑虑,但我对此感到满意。我什至以这种方式设置字符编码和其他属性。这将模板的其余部分作为消息正文。再次,我很高兴。

#set ( $myAtts.encoding = "utf-8" )
#set ( $myAtts.from = "stu@nowhere.net" )
于 2009-07-06T06:42:38.930 回答
1

$work我们做 4. 它工作得很好,而且反对并非所有电子邮件逻辑都生活在同一个地方的论点似乎有点太严格了。您将只有两个彼此相邻的速度文件。即使只有一个模板文件,您仍然有填充数据、确定收件人、附加附件等的逻辑,这些也不存在于 Velocity 文件中。


我更喜欢 2 而不是 3,只是因为我不喜欢 Velocity 宏。使用 Java 对象似乎更灵活。

$mailContext.setSubjectLine($subject)

使用 2 或 3,您可以更接近将所有东西放在一个地方的目标:例如,您也可以让 Velocity 设置收件人列表。另一方面,这似乎与 Velocity 是一种纯粹的模板技术的想法相冲突。

这里要考虑的是谁在编写 Velocity 模板。它越接近“最终用户”,您就越不想用与创建电子邮件内容没有直接关系的任何事情来麻烦他们(并防止他们弄乱)。


不确定这对于 Java Mail API 是否可行、有意义或什至可能,但只是为了完整性:

 6.让velocity创建包括标题在内的整个电子邮件,而不仅仅是内容和主题。与 1 的不同之处在于您不需要对该输出进行后处理,它可以直接发送到邮件传输代理。可能不适用于附件。

To: $to
CC: $cc
Subject: $subject

Here comes the content.
于 2009-07-06T06:42:09.070 回答