2

電子メールメッセージを表すさまざまなVelocityテンプレートファイルがあります。テンプレートファイルがメッセージの件名と内容を出力できるようにするためのエレガントな方法を探しています。私はいくつかのオプションを検討しました:

  1. 出力の最初の行を「Subject:Bla」のようにして、Javaで削除します。Javaから派手な文字列操作を実行することは、そもそもVelocityを使用して解決しようとしている問題であるため、このアプローチを拒否しました。

  2. セッターを呼び出すために、Velocityマクロの一部のコードのマッピングに設定可能なオブジェクトをスローします。長所:非常に簡単です。短所:出力の形式としても、Velocityから外部オブジェクトを設定するというアイデアは嫌いです。しかし、それは不合理な嫌悪感かもしれません。

  3. #setSubjectLineなどのカスタムVelocityコマンドを作成します。長所:よりエレガント。短所:電子メールであるかどうかに関係なく、すべてのテンプレートに有効なコマンドとして適用されます。

  4. 件名と残りの電子メール用に別々のテンプレートファイルを用意します。プロ:特別なトリックはまったくありません!短所:すべての電子メールロジックが同じ場所にあるわけではありません。

  5. 私が知らないいくつかのクールなVelocityトリック。

  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

4. それは$work問題なく動作し、すべての電子メール ロジックが同じ場所に存在するわけではないという議論は、少し厳しすぎるように思えます。2 つの速度ファイルが隣り合っているだけです。また、テンプレート ファイルが 1 つしかない場合でも、データの入力、受信者の決定、添付ファイルの添付などを行うロジックはありますが、これも Velocity ファイルにはありません。


私は Velocity マクロが好きではないという理由だけで、3 よりも 2 を好みます。Java オブジェクトを使用すると、より柔軟に見えます。

$mailContext.setSubjectLine($subject)

2 つまたは 3 つを使用すると、すべてを 1 か所にまとめるという目標に近づくことができます。たとえば、Velocity を使用して受信者リストを設定することもできます。一方、これは、Velocity が純粋なテンプレート テクノロジであるという考えと矛盾するようです。

ここで考慮すべきことは、誰が Velocity テンプレートを書いているかということです。「エンドユーザー」に近づけば近づくほど、電子メールの内容の作成に直接関係のないことでエンドユーザーを悩ませたくなくなります (そして、エンドユーザーを混乱させたくありません)。


それが実現可能か、理にかなっているか、Java Mail API で可能かどうかはわかりませんが、完全を期すために:

 6. コンテンツと件名だけでなく、ヘッダーを含む電子メール メッセージ全体を迅速に作成します。1 との違いは、この出力を後処理する必要がなく、メール転送エージェントに直接送信できることです。おそらく添付ファイルでは機能しません。

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

Here comes the content.
于 2009-07-06T06:42:09.070 に答える